Set up

suppressPackageStartupMessages({
  library(tidyverse)
})

Directories and File Inputs/Outputs

# Detect the ".git" folder -- this will be in the project root directory
# Use this as the root directory to ensure proper sourcing of functions 
# no matter where this is called from
root_dir <- rprojroot::find_root(rprojroot::has_dir(".git"))
analysis_dir <- file.path(root_dir, "analyses", "tmb-vaf-longitudinal")
results_dir <- file.path(analysis_dir, "results")
input_dir <- file.path(analysis_dir, "input")
files_dir <- file.path(root_dir, "analyses", "sample-distribution-analysis", "results")

# Input files for the paired longitudinal (PR) cohort
pbta_file <- file.path(files_dir, "pbta.tsv") # file from add-sample-distribution module
genomic_paired_file <- file.path(files_dir, "genomic_assays_matched_time_points.tsv")
tmb_vaf_file <- file.path(results_dir, "tmb_vaf_genomic.tsv")
palette_file <- file.path(root_dir, "figures", "palettes", "oncoprint_color_palette.tsv")


# Input files for the PBTA cohort
maf_file <- file.path(results_dir, "maf.tsv")
tmb_file <- file.path(input_dir, "snv-mutation-tmb-coding.tsv")


# File path to PR plot directory
PR_plots_dir <-
  file.path(analysis_dir, "plots", "Alteration_type_barplots_PR")
if (!dir.exists(PR_plots_dir)) {
  dir.create(PR_plots_dir)
}

# File path to kids_PR_plots directory
kids_PR_plots_dir <-
  file.path(PR_plots_dir, "kids_PR_plots")
if (!dir.exists(kids_PR_plots_dir)) {
  dir.create(kids_PR_plots_dir)
}

# File path to kids_molecular_subtype_PR_plots_dir directory
kids_molecular_subtype_PR_plots_dir <-
  file.path(PR_plots_dir, "kids_PR_plots")
if (!dir.exists(kids_molecular_subtype_PR_plots_dir)) {
  dir.create(kids_molecular_subtype_PR_plots_dir)
}


# File path to molecular_subtype_PR_plots directory
molecular_subtype_PR_plots_dir <-
  file.path(PR_plots_dir, "molecular_subtype_PR_plots")
if (!dir.exists(molecular_subtype_PR_plots_dir)) {
  dir.create(molecular_subtype_PR_plots_dir)
}

# File path to PBTA plot directory
PBTA_plots_dir <-
  file.path(analysis_dir, "plots", "Alteration_type_barplots_PBTA")
if (!dir.exists(PBTA_plots_dir)) {
  dir.create(PBTA_plots_dir)
}


# File path to molecular_subtype_PBTA_plots directory
molecular_subtype_PBTA_plots_dir <-
  file.path(PBTA_plots_dir, "molecular_subtype_PBTA_plots")
if (!dir.exists(molecular_subtype_PBTA_plots_dir)) {
  dir.create(molecular_subtype_PBTA_plots_dir)
}

source(paste0(root_dir, "/figures/scripts/theme.R"))
source(paste0(analysis_dir, "/util/function-create-barplot.R"))

Read in data and process

PR cohort

# Vector to order timepoints
timepoints_order <- c("Diagnosis", "Progressive", "Recurrence", "Deceased", "Second Malignancy", "Unavailable")

# Vector to order Variant_Classification
variants_order <- c("Frame_Shift_Del", "Frame_Shift_Ins", "In_Frame_Del", 
                            "In_Frame_Ins", "Missense_Mutation", "Nonsense_Mutation", 
                            "Nonstop_Mutation", "Splice_Site", "Translation_Start_Site")

pbta_df <- readr::read_tsv(pbta_file, guess_max = 100000, show_col_types = FALSE) %>% 
  select(Kids_First_Participant_ID, Kids_First_Biospecimen_ID, cg_multiple, cg_id, cgGFAC, tumor_descriptor, molecular_subtype)

# This includes non synonymous mutations as described in the `01-preporcess-data.Rmd`
tmb_vaf_df <- readr::read_tsv(tmb_vaf_file, guess_max = 100000, show_col_types = FALSE) %>% 
  filter(!tmb >= 10) %>% 
  select(Kids_First_Biospecimen_ID, Variant_Classification, gene_protein, mutation_count,   region_size, tmb, VAF)

genomic_paired_df <- readr::read_tsv(genomic_paired_file, guess_max = 100000, show_col_types = FALSE) %>%
  left_join(pbta_df, by = c("Kids_First_Participant_ID")) %>% 
  left_join(tmb_vaf_df, by = c("Kids_First_Biospecimen_ID")) %>%
  filter(!is.na(tmb))

no_samples_with_tmb <- print(length(unique(genomic_paired_df$Kids_First_Participant_ID)))
[1] 116
# Attention as some bs specimen might not have TMB.
# If that happens, we will end up with samples lacking timepoints.
# Let's identify these samples and remove them for now.

PR_df <- genomic_paired_df %>%
  select(Kids_First_Participant_ID, tumor_descriptor) %>% 
  unique() %>%
  arrange(Kids_First_Participant_ID, tumor_descriptor) %>%
  group_by(Kids_First_Participant_ID) %>%
  summarize(tumor_descriptor_sum = str_c(tumor_descriptor, collapse = ";")) %>%
  filter(!tumor_descriptor_sum %in% c("Diagnosis", "Progressive", "Recurrence", "Second Malignancy", "Unavailable", "Deceased", "Progressive;Progressive")) %>%
  left_join(genomic_paired_df, by = c("Kids_First_Participant_ID")) %>%
  filter(!cg_id == "NA",
          !tumor_descriptor == "Not Reported") %>% 
  mutate(match_id = paste(tumor_descriptor, Kids_First_Participant_ID, sep = "_"),
         cg_id = str_replace(cg_id, c("/|-"), " "))
  

no_samples <- print(length(unique(PR_df$Kids_First_Participant_ID)))
[1] 107
# Let's count number of samples 
PR_count_df <- PR_df %>% 
  group_by(tumor_descriptor, cg_id, molecular_subtype, Kids_First_Participant_ID, match_id, Variant_Classification) %>% 
  dplyr::count(cg_id) %>% 
  mutate(tumor_descriptor = factor(tumor_descriptor),
         tumor_descriptor = fct_relevel(tumor_descriptor, timepoints_order),
         Variant_Classification = factor(Variant_Classification),
         Variant_Classification = fct_relevel(Variant_Classification, variants_order)) %>% 
  arrange(tumor_descriptor, Variant_Classification)
Warning: There were 945 warnings in `mutate()`.
The first warning was:
ℹ In argument: `tumor_descriptor = fct_relevel(tumor_descriptor, timepoints_order)`.
ℹ In group 1: `tumor_descriptor = "Deceased"`, `cg_id = "Adamantinomatous Craniopharyngioma"`, `molecular_subtype = "CRANIO, ADAM"`, `Kids_First_Participant_ID =
  "PT_WYXTEG3E"`, `match_id = "Deceased_PT_WYXTEG3E"`, `Variant_Classification = "Frame_Shift_Del"`.
Caused by warning:
! 1 unknown level in `f`: Unavailable
ℹ Run ]8;;ide:run:dplyr::last_dplyr_warnings()dplyr::last_dplyr_warnings()]8;; to see the 944 remaining warnings.

PBTA cohort

tmb_df <- readr::read_tsv(tmb_file, guess_max = 100000, show_col_types = FALSE) %>% 
  dplyr::rename(Kids_First_Biospecimen_ID = Tumor_Sample_Barcode) # change name of the biospecimen to match the one from the histologies files

tmb_vaf_df <- readr::read_tsv(maf_file, guess_max = 100000, show_col_types = FALSE) %>%
  left_join(tmb_df, by = c("Kids_First_Biospecimen_ID")) %>% 
  filter(!tmb >= 10,
         !is.na(tmb)) 

PBTA_df <- pbta_df %>% 
  left_join(tmb_vaf_df, by = c("Kids_First_Biospecimen_ID")) %>% 
  filter(!cg_id == "NA",
          !tumor_descriptor == "Not Reported") %>% 
  mutate(match_id = paste(tumor_descriptor, Kids_First_Participant_ID, sep = "_"),
         cg_id = str_replace(cg_id, c("/|-"), " "))

no_samples <- print(length(unique(PBTA_df$Kids_First_Participant_ID)))
[1] 2153
# Let's count number of samples 
PBTA_count_df <- PBTA_df %>% 
  group_by(tumor_descriptor, cg_id, molecular_subtype, Kids_First_Participant_ID, match_id, Variant_Classification) %>% 
  dplyr::count(cg_id) %>% 
  mutate(tumor_descriptor = factor(tumor_descriptor),
         tumor_descriptor = fct_relevel(tumor_descriptor, timepoints_order),
         Variant_Classification = factor(Variant_Classification),
         Variant_Classification = fct_relevel(Variant_Classification, variants_order)) %>% 
  arrange(tumor_descriptor, Variant_Classification) 
Warning: There were 8486 warnings in `mutate()`.
The first warning was:
ℹ In argument: `tumor_descriptor = fct_relevel(tumor_descriptor, timepoints_order)`.
ℹ In group 1: `tumor_descriptor = "Deceased"`, `cg_id = "Adamantinomatous Craniopharyngioma"`, `molecular_subtype = "CRANIO, ADAM"`, `Kids_First_Participant_ID =
  "PT_WYXTEG3E"`, `match_id = "Deceased_PT_WYXTEG3E"`, `Variant_Classification = "Frame_Shift_Del"`.
Caused by warning:
! 1 unknown level in `f`: Unavailable
ℹ Run ]8;;ide:run:dplyr::last_dplyr_warnings()dplyr::last_dplyr_warnings()]8;; to see the 8485 remaining warnings.

Define parameters for plots

# Read color palette
palette_df <- readr::read_tsv(palette_file, guess_max = 100000, show_col_types = FALSE) %>% 
  mutate(color_names = factor(color_names),
         color_names = fct_relevel(color_names, variants_order))

# Define and order palette
palette <- palette_df$hex_codes
names(palette) <- palette_df$color_names

Alterations per timepoint

PR cohort

# Define parameters for function
x_value <- PR_count_df$tumor_descriptor
title <- paste("Variant types in the paired longitudinal cohort", sep = " ")

# Run function
fname <- paste0(PR_plots_dir, "/", "Alteration_type_timepoints_barplots_PR.pdf")
print(fname)
[1] "/Users/chronia/CHOP/GitHub/pbta-tumor-evolution/analyses/tmb-vaf-longitudinal/plots/Alteration_type_barplots_PR/Alteration_type_timepoints_barplots_PR.pdf"
p <- create_stacked_barplot_variant(df = PR_count_df, x = x_value, palette = palette, title = title)
pdf(file = fname, width = 6, height = 6)
print(p)
dev.off()
quartz_off_screen 
                2 

PBTA cohort

# Define parameters for function
x_value <- PBTA_count_df$tumor_descriptor
title <- paste("Variant types in the PBTA cohort", sep = " ")

# Run function
fname <- paste0(PBTA_plots_dir, "/", "Alteration_type_timepoints_barplots_PBTA.pdf")
print(fname)
[1] "/Users/chronia/CHOP/GitHub/pbta-tumor-evolution/analyses/tmb-vaf-longitudinal/plots/Alteration_type_barplots_PBTA/Alteration_type_timepoints_barplots_PBTA.pdf"
p <- create_stacked_barplot_variant(df = PBTA_count_df, x = x_value, palette = palette, title = title)
pdf(file = fname, width = 6, height = 6)
print(p)
dev.off()
quartz_off_screen 
                2 

Alterations per timepoint in each cancer type

PR cohort

PR_panel_df <- PR_count_df %>% 
  mutate(cg_id = str_wrap(cg_id, 12)) # Edit to fit in the plot title for the panel

# Define parameters for function
x_value <- PR_panel_df$tumor_descriptor
title <- paste("Variant types across cancer groups in the paired longitudinal cohort", sep = " ")
rows <- 5

# Run function
fname <- paste0(PR_plots_dir, "/", "Alteration_type_timepoints_cg_id_barplots_PR.pdf")
print(fname)
[1] "/Users/chronia/CHOP/GitHub/pbta-tumor-evolution/analyses/tmb-vaf-longitudinal/plots/Alteration_type_barplots_PR/Alteration_type_timepoints_cg_id_barplots_PR.pdf"
p <- create_stacked_barplot_variant_cg_id(df = PR_panel_df, x = x_value, palette = palette, title = title, rows = rows)
pdf(file = fname, width = 12, height = 15)
print(p)
dev.off()
quartz_off_screen 
                2 

PBTA cohort

PBTA_panel_df <- PBTA_count_df %>% 
  mutate(cg_id = str_wrap(cg_id, 12)) # Edit to fit in the plot title for the panel

# Define parameters for function
x_value <- PBTA_panel_df$tumor_descriptor
title <- paste("Variant types across cancer groups in the PBTA cohort", sep = " ")
rows <- 10

# Run function
fname <- paste0(PBTA_plots_dir, "/", "Alteration_type_timepoints_cg_id_barplots_PBTA.pdf")
print(fname)
[1] "/Users/chronia/CHOP/GitHub/pbta-tumor-evolution/analyses/tmb-vaf-longitudinal/plots/Alteration_type_barplots_PBTA/Alteration_type_timepoints_cg_id_barplots_PBTA.pdf"
p <- create_stacked_barplot_variant_cg_id(df = PBTA_panel_df, x = x_value, palette = palette, title = title, rows = rows)
pdf(file = fname, width = 15, height = 28)
print(p)
dev.off()
quartz_off_screen 
                2 

Alterations per timepoint in each cancer type and molecular subtype

PR cohort

PR_panel_df <- PR_count_df %>% 
  mutate(cg_id = str_replace_all(cg_id, " ", "_"),
         molecular_subtype = str_wrap(molecular_subtype, 12)) # Edit to fit in the plot title for the panel

sample <- as.character(unique(PR_panel_df$cg_id)) 
sample <- sort(sample, decreasing = FALSE)
sample
 [1] "Adamantinomatous_Craniopharyngioma"       "Atypical_Teratoid_Rhabdoid_Tumor"         "Chordoma"                                
 [4] "Choroid_plexus_carcinoma"                 "CNS_Embryonal_tumor"                      "Craniopharyngioma"                       
 [7] "Diffuse_midline_glioma"                   "Dysembryoplastic_neuroepithelial_tumor"   "Embryonal_tumor_with_multilayer_rosettes"
[10] "Ependymoma"                               "Ewing_sarcoma"                            "Ganglioglioma"                           
[13] "Glial_neuronal_tumor"                     "Hemangioblastoma"                         "High_grade_glioma"                       
[16] "Low_grade_glioma"                         "Malignant_peripheral_nerve_sheath_tumor"  "Medulloblastoma"                         
[19] "Meningioma"                               "Neuroblastoma"                            "Neurofibroma_Plexiform"                  
[22] "Pilocytic_astrocytoma"                    "Schwannoma"                              
# Loop through variable
for (i in seq_along(sample)){
  print(i)
  df_sub <- PR_panel_df %>%
    filter(cg_id == sample[i]) 
 
  if (i %in% c(16)){
    width_value = 18
    }else{
    width_value = 10
    }
  
# Define parameters for function
x_value <- df_sub$tumor_descriptor
title <- paste(sample[i], "Variants across molecular subtypes", sep = ": ")
rows_value <- 1

# Run function
fname <- paste0(molecular_subtype_PR_plots_dir, "/", sample[i], "_Alteration_type_timepoints_molecular_subtype_barplots_PR.pdf")
print(fname)
p <- create_stacked_barplot_variant_molecular_subtype(df = df_sub, x = x_value, palette = palette, title = title, rows = rows_value)
pdf(file = fname, width = width_value, height = 6)
print(p)
dev.off()
}
[1] 1
[1] "/Users/chronia/CHOP/GitHub/pbta-tumor-evolution/analyses/tmb-vaf-longitudinal/plots/Alteration_type_barplots_PR/molecular_subtype_PR_plots/Adamantinomatous_Craniopharyngioma_Alteration_type_timepoints_molecular_subtype_barplots_PR.pdf"
[1] 2
[1] "/Users/chronia/CHOP/GitHub/pbta-tumor-evolution/analyses/tmb-vaf-longitudinal/plots/Alteration_type_barplots_PR/molecular_subtype_PR_plots/Atypical_Teratoid_Rhabdoid_Tumor_Alteration_type_timepoints_molecular_subtype_barplots_PR.pdf"
[1] 3
[1] "/Users/chronia/CHOP/GitHub/pbta-tumor-evolution/analyses/tmb-vaf-longitudinal/plots/Alteration_type_barplots_PR/molecular_subtype_PR_plots/Chordoma_Alteration_type_timepoints_molecular_subtype_barplots_PR.pdf"
[1] 4
[1] "/Users/chronia/CHOP/GitHub/pbta-tumor-evolution/analyses/tmb-vaf-longitudinal/plots/Alteration_type_barplots_PR/molecular_subtype_PR_plots/Choroid_plexus_carcinoma_Alteration_type_timepoints_molecular_subtype_barplots_PR.pdf"
[1] 5
[1] "/Users/chronia/CHOP/GitHub/pbta-tumor-evolution/analyses/tmb-vaf-longitudinal/plots/Alteration_type_barplots_PR/molecular_subtype_PR_plots/CNS_Embryonal_tumor_Alteration_type_timepoints_molecular_subtype_barplots_PR.pdf"
[1] 6
[1] "/Users/chronia/CHOP/GitHub/pbta-tumor-evolution/analyses/tmb-vaf-longitudinal/plots/Alteration_type_barplots_PR/molecular_subtype_PR_plots/Craniopharyngioma_Alteration_type_timepoints_molecular_subtype_barplots_PR.pdf"
[1] 7
[1] "/Users/chronia/CHOP/GitHub/pbta-tumor-evolution/analyses/tmb-vaf-longitudinal/plots/Alteration_type_barplots_PR/molecular_subtype_PR_plots/Diffuse_midline_glioma_Alteration_type_timepoints_molecular_subtype_barplots_PR.pdf"
[1] 8
[1] "/Users/chronia/CHOP/GitHub/pbta-tumor-evolution/analyses/tmb-vaf-longitudinal/plots/Alteration_type_barplots_PR/molecular_subtype_PR_plots/Dysembryoplastic_neuroepithelial_tumor_Alteration_type_timepoints_molecular_subtype_barplots_PR.pdf"
[1] 9
[1] "/Users/chronia/CHOP/GitHub/pbta-tumor-evolution/analyses/tmb-vaf-longitudinal/plots/Alteration_type_barplots_PR/molecular_subtype_PR_plots/Embryonal_tumor_with_multilayer_rosettes_Alteration_type_timepoints_molecular_subtype_barplots_PR.pdf"
[1] 10
[1] "/Users/chronia/CHOP/GitHub/pbta-tumor-evolution/analyses/tmb-vaf-longitudinal/plots/Alteration_type_barplots_PR/molecular_subtype_PR_plots/Ependymoma_Alteration_type_timepoints_molecular_subtype_barplots_PR.pdf"
[1] 11
[1] "/Users/chronia/CHOP/GitHub/pbta-tumor-evolution/analyses/tmb-vaf-longitudinal/plots/Alteration_type_barplots_PR/molecular_subtype_PR_plots/Ewing_sarcoma_Alteration_type_timepoints_molecular_subtype_barplots_PR.pdf"
[1] 12
[1] "/Users/chronia/CHOP/GitHub/pbta-tumor-evolution/analyses/tmb-vaf-longitudinal/plots/Alteration_type_barplots_PR/molecular_subtype_PR_plots/Ganglioglioma_Alteration_type_timepoints_molecular_subtype_barplots_PR.pdf"
[1] 13
[1] "/Users/chronia/CHOP/GitHub/pbta-tumor-evolution/analyses/tmb-vaf-longitudinal/plots/Alteration_type_barplots_PR/molecular_subtype_PR_plots/Glial_neuronal_tumor_Alteration_type_timepoints_molecular_subtype_barplots_PR.pdf"
[1] 14
[1] "/Users/chronia/CHOP/GitHub/pbta-tumor-evolution/analyses/tmb-vaf-longitudinal/plots/Alteration_type_barplots_PR/molecular_subtype_PR_plots/Hemangioblastoma_Alteration_type_timepoints_molecular_subtype_barplots_PR.pdf"
[1] 15
[1] "/Users/chronia/CHOP/GitHub/pbta-tumor-evolution/analyses/tmb-vaf-longitudinal/plots/Alteration_type_barplots_PR/molecular_subtype_PR_plots/High_grade_glioma_Alteration_type_timepoints_molecular_subtype_barplots_PR.pdf"
[1] 16
[1] "/Users/chronia/CHOP/GitHub/pbta-tumor-evolution/analyses/tmb-vaf-longitudinal/plots/Alteration_type_barplots_PR/molecular_subtype_PR_plots/Low_grade_glioma_Alteration_type_timepoints_molecular_subtype_barplots_PR.pdf"
[1] 17
[1] "/Users/chronia/CHOP/GitHub/pbta-tumor-evolution/analyses/tmb-vaf-longitudinal/plots/Alteration_type_barplots_PR/molecular_subtype_PR_plots/Malignant_peripheral_nerve_sheath_tumor_Alteration_type_timepoints_molecular_subtype_barplots_PR.pdf"
[1] 18
[1] "/Users/chronia/CHOP/GitHub/pbta-tumor-evolution/analyses/tmb-vaf-longitudinal/plots/Alteration_type_barplots_PR/molecular_subtype_PR_plots/Medulloblastoma_Alteration_type_timepoints_molecular_subtype_barplots_PR.pdf"
[1] 19
[1] "/Users/chronia/CHOP/GitHub/pbta-tumor-evolution/analyses/tmb-vaf-longitudinal/plots/Alteration_type_barplots_PR/molecular_subtype_PR_plots/Meningioma_Alteration_type_timepoints_molecular_subtype_barplots_PR.pdf"
[1] 20
[1] "/Users/chronia/CHOP/GitHub/pbta-tumor-evolution/analyses/tmb-vaf-longitudinal/plots/Alteration_type_barplots_PR/molecular_subtype_PR_plots/Neuroblastoma_Alteration_type_timepoints_molecular_subtype_barplots_PR.pdf"
[1] 21
[1] "/Users/chronia/CHOP/GitHub/pbta-tumor-evolution/analyses/tmb-vaf-longitudinal/plots/Alteration_type_barplots_PR/molecular_subtype_PR_plots/Neurofibroma_Plexiform_Alteration_type_timepoints_molecular_subtype_barplots_PR.pdf"
[1] 22
[1] "/Users/chronia/CHOP/GitHub/pbta-tumor-evolution/analyses/tmb-vaf-longitudinal/plots/Alteration_type_barplots_PR/molecular_subtype_PR_plots/Pilocytic_astrocytoma_Alteration_type_timepoints_molecular_subtype_barplots_PR.pdf"
[1] 23
[1] "/Users/chronia/CHOP/GitHub/pbta-tumor-evolution/analyses/tmb-vaf-longitudinal/plots/Alteration_type_barplots_PR/molecular_subtype_PR_plots/Schwannoma_Alteration_type_timepoints_molecular_subtype_barplots_PR.pdf"

PBTA cohort

PBTA_panel_df <- PBTA_count_df %>% 
  mutate(cg_id = str_replace_all(cg_id, " ", "_"),
         molecular_subtype = str_wrap(molecular_subtype, 12)) # Edit to fit in the plot title for the panel

sample <- as.character(unique(PBTA_panel_df$cg_id)) 
sample <- sort(sample, decreasing = FALSE)
sample
 [1] "Adamantinomatous_Craniopharyngioma"                   "Astroblastoma"                                       
 [3] "Astrocytoma"                                          "Atypical_choroid_plexus_papilloma"                   
 [5] "Atypical_Teratoid_Rhabdoid_Tumor"                     "Cavernoma"                                           
 [7] "Central_neurocytoma"                                  "Chondromyxoid_fibroma"                               
 [9] "Chordoma"                                             "Choroid_plexus_carcinoma"                            
[11] "Choroid_plexus_papilloma"                             "Choroid_plexus_tumor"                                
[13] "CNS_Burkitt's_lymphoma"                               "CNS_Embryonal_tumor"                                 
[15] "CNS_neuroblastoma"                                    "Craniopharyngioma"                                   
[17] "Desmoplastic_infantile_astrocytoma_and_ganglioglioma" "Diffuse_fibrillary_astrocytoma"                      
[19] "Diffuse_hemispheric_glioma"                           "Diffuse_intrinsic_pontine_glioma"                    
[21] "Diffuse_leptomeningeal_glioneuronal_tumor"            "Diffuse_midline_glioma"                              
[23] "Dysembryoplastic_neuroepithelial_tumor"               "Embryonal_tumor_with_multilayer_rosettes"            
[25] "Ependymoma"                                           "Epstein_Barr_virus-related_tumor"                    
[27] "Ewing_sarcoma"                                        "Extraventricular_neurocytoma"                        
[29] "Ganglioglioma"                                        "Ganglioneuroblastoma"                                
[31] "Ganglioneuroma"                                       "Germinoma"                                           
[33] "Glial_neuronal_tumor"                                 "Glioblastoma"                                        
[35] "Hemangioblastoma"                                     "High_grade_glioma"                                   
[37] "Histiocytic_tumor"                                    "Infant_type_hemispheric_glioma"                      
[39] "Inflammatory_Myofibroblastic_Tumor"                   "Langerhans_Cell_histiocytosis"                       
[41] "Low_grade_glioma"                                     "Malignant_peripheral_nerve_sheath_tumor"             
[43] "Medulloblastoma"                                      "Melanocytic_tumor"                                   
[45] "Meningioma"                                           "Mesenchymal_tumor"                                   
[47] "Metastatic_secondary_tumors"                          "Mixed_germ_cell_tumor"                               
[49] "Neuroblastoma"                                        "Neurofibroma_Plexiform"                              
[51] "Non_germinomatous_germ_cell_tumor"                    "Oligodendroglioma"                                   
[53] "Perineuroma"                                          "Pilocytic_astrocytoma"                               
[55] "Pineoblastoma"                                        "Pleomorphic_xanthoastrocytoma"                       
[57] "Rhabdomyosarcoma"                                     "Rosai_Dorfman_disease"                               
[59] "Rosette_forming_glioneuronal_tumor"                   "Sarcoma"                                             
[61] "Schwannoma"                                           "Subependymal_Giant_Cell_Astrocytoma"                 
[63] "Teratoma"                                            
# Loop through variable
for (i in seq_along(sample)){
  print(i)
  df_sub <- PBTA_panel_df %>%
    filter(cg_id == sample[i]) 
 
   if (i %in% c(25, 41)){
    width_value = 18
    }else{
    width_value = 10
    }
  
# Define parameters for function
x_value <- df_sub$tumor_descriptor
title <- paste(sample[i], "Variants across molecular subtypes", sep = ": ")
rows_value <- 1

# Run function
fname <- paste0(molecular_subtype_PBTA_plots_dir, "/", sample[i], "_Alteration_type_timepoints_molecular_subtype_barplots_PBTA.pdf")
print(fname)
p <- create_stacked_barplot_variant_molecular_subtype(df = df_sub, x = x_value, palette = palette, title = title, rows = rows_value)
pdf(file = fname, width = width_value, height = 6)
print(p)
dev.off()
}
[1] 1
[1] "/Users/chronia/CHOP/GitHub/pbta-tumor-evolution/analyses/tmb-vaf-longitudinal/plots/Alteration_type_barplots_PBTA/molecular_subtype_PBTA_plots/Adamantinomatous_Craniopharyngioma_Alteration_type_timepoints_molecular_subtype_barplots_PBTA.pdf"
[1] 2
[1] "/Users/chronia/CHOP/GitHub/pbta-tumor-evolution/analyses/tmb-vaf-longitudinal/plots/Alteration_type_barplots_PBTA/molecular_subtype_PBTA_plots/Astroblastoma_Alteration_type_timepoints_molecular_subtype_barplots_PBTA.pdf"
[1] 3
[1] "/Users/chronia/CHOP/GitHub/pbta-tumor-evolution/analyses/tmb-vaf-longitudinal/plots/Alteration_type_barplots_PBTA/molecular_subtype_PBTA_plots/Astrocytoma_Alteration_type_timepoints_molecular_subtype_barplots_PBTA.pdf"
[1] 4
[1] "/Users/chronia/CHOP/GitHub/pbta-tumor-evolution/analyses/tmb-vaf-longitudinal/plots/Alteration_type_barplots_PBTA/molecular_subtype_PBTA_plots/Atypical_choroid_plexus_papilloma_Alteration_type_timepoints_molecular_subtype_barplots_PBTA.pdf"
[1] 5
[1] "/Users/chronia/CHOP/GitHub/pbta-tumor-evolution/analyses/tmb-vaf-longitudinal/plots/Alteration_type_barplots_PBTA/molecular_subtype_PBTA_plots/Atypical_Teratoid_Rhabdoid_Tumor_Alteration_type_timepoints_molecular_subtype_barplots_PBTA.pdf"
[1] 6
[1] "/Users/chronia/CHOP/GitHub/pbta-tumor-evolution/analyses/tmb-vaf-longitudinal/plots/Alteration_type_barplots_PBTA/molecular_subtype_PBTA_plots/Cavernoma_Alteration_type_timepoints_molecular_subtype_barplots_PBTA.pdf"
[1] 7
[1] "/Users/chronia/CHOP/GitHub/pbta-tumor-evolution/analyses/tmb-vaf-longitudinal/plots/Alteration_type_barplots_PBTA/molecular_subtype_PBTA_plots/Central_neurocytoma_Alteration_type_timepoints_molecular_subtype_barplots_PBTA.pdf"
[1] 8
[1] "/Users/chronia/CHOP/GitHub/pbta-tumor-evolution/analyses/tmb-vaf-longitudinal/plots/Alteration_type_barplots_PBTA/molecular_subtype_PBTA_plots/Chondromyxoid_fibroma_Alteration_type_timepoints_molecular_subtype_barplots_PBTA.pdf"
[1] 9
[1] "/Users/chronia/CHOP/GitHub/pbta-tumor-evolution/analyses/tmb-vaf-longitudinal/plots/Alteration_type_barplots_PBTA/molecular_subtype_PBTA_plots/Chordoma_Alteration_type_timepoints_molecular_subtype_barplots_PBTA.pdf"
[1] 10
[1] "/Users/chronia/CHOP/GitHub/pbta-tumor-evolution/analyses/tmb-vaf-longitudinal/plots/Alteration_type_barplots_PBTA/molecular_subtype_PBTA_plots/Choroid_plexus_carcinoma_Alteration_type_timepoints_molecular_subtype_barplots_PBTA.pdf"
[1] 11
[1] "/Users/chronia/CHOP/GitHub/pbta-tumor-evolution/analyses/tmb-vaf-longitudinal/plots/Alteration_type_barplots_PBTA/molecular_subtype_PBTA_plots/Choroid_plexus_papilloma_Alteration_type_timepoints_molecular_subtype_barplots_PBTA.pdf"
[1] 12
[1] "/Users/chronia/CHOP/GitHub/pbta-tumor-evolution/analyses/tmb-vaf-longitudinal/plots/Alteration_type_barplots_PBTA/molecular_subtype_PBTA_plots/Choroid_plexus_tumor_Alteration_type_timepoints_molecular_subtype_barplots_PBTA.pdf"
[1] 13
[1] "/Users/chronia/CHOP/GitHub/pbta-tumor-evolution/analyses/tmb-vaf-longitudinal/plots/Alteration_type_barplots_PBTA/molecular_subtype_PBTA_plots/CNS_Burkitt's_lymphoma_Alteration_type_timepoints_molecular_subtype_barplots_PBTA.pdf"
[1] 14
[1] "/Users/chronia/CHOP/GitHub/pbta-tumor-evolution/analyses/tmb-vaf-longitudinal/plots/Alteration_type_barplots_PBTA/molecular_subtype_PBTA_plots/CNS_Embryonal_tumor_Alteration_type_timepoints_molecular_subtype_barplots_PBTA.pdf"
[1] 15
[1] "/Users/chronia/CHOP/GitHub/pbta-tumor-evolution/analyses/tmb-vaf-longitudinal/plots/Alteration_type_barplots_PBTA/molecular_subtype_PBTA_plots/CNS_neuroblastoma_Alteration_type_timepoints_molecular_subtype_barplots_PBTA.pdf"
[1] 16
[1] "/Users/chronia/CHOP/GitHub/pbta-tumor-evolution/analyses/tmb-vaf-longitudinal/plots/Alteration_type_barplots_PBTA/molecular_subtype_PBTA_plots/Craniopharyngioma_Alteration_type_timepoints_molecular_subtype_barplots_PBTA.pdf"
[1] 17
[1] "/Users/chronia/CHOP/GitHub/pbta-tumor-evolution/analyses/tmb-vaf-longitudinal/plots/Alteration_type_barplots_PBTA/molecular_subtype_PBTA_plots/Desmoplastic_infantile_astrocytoma_and_ganglioglioma_Alteration_type_timepoints_molecular_subtype_barplots_PBTA.pdf"
[1] 18
[1] "/Users/chronia/CHOP/GitHub/pbta-tumor-evolution/analyses/tmb-vaf-longitudinal/plots/Alteration_type_barplots_PBTA/molecular_subtype_PBTA_plots/Diffuse_fibrillary_astrocytoma_Alteration_type_timepoints_molecular_subtype_barplots_PBTA.pdf"
[1] 19
[1] "/Users/chronia/CHOP/GitHub/pbta-tumor-evolution/analyses/tmb-vaf-longitudinal/plots/Alteration_type_barplots_PBTA/molecular_subtype_PBTA_plots/Diffuse_hemispheric_glioma_Alteration_type_timepoints_molecular_subtype_barplots_PBTA.pdf"
[1] 20
[1] "/Users/chronia/CHOP/GitHub/pbta-tumor-evolution/analyses/tmb-vaf-longitudinal/plots/Alteration_type_barplots_PBTA/molecular_subtype_PBTA_plots/Diffuse_intrinsic_pontine_glioma_Alteration_type_timepoints_molecular_subtype_barplots_PBTA.pdf"
[1] 21
[1] "/Users/chronia/CHOP/GitHub/pbta-tumor-evolution/analyses/tmb-vaf-longitudinal/plots/Alteration_type_barplots_PBTA/molecular_subtype_PBTA_plots/Diffuse_leptomeningeal_glioneuronal_tumor_Alteration_type_timepoints_molecular_subtype_barplots_PBTA.pdf"
[1] 22
[1] "/Users/chronia/CHOP/GitHub/pbta-tumor-evolution/analyses/tmb-vaf-longitudinal/plots/Alteration_type_barplots_PBTA/molecular_subtype_PBTA_plots/Diffuse_midline_glioma_Alteration_type_timepoints_molecular_subtype_barplots_PBTA.pdf"
[1] 23
[1] "/Users/chronia/CHOP/GitHub/pbta-tumor-evolution/analyses/tmb-vaf-longitudinal/plots/Alteration_type_barplots_PBTA/molecular_subtype_PBTA_plots/Dysembryoplastic_neuroepithelial_tumor_Alteration_type_timepoints_molecular_subtype_barplots_PBTA.pdf"
[1] 24
[1] "/Users/chronia/CHOP/GitHub/pbta-tumor-evolution/analyses/tmb-vaf-longitudinal/plots/Alteration_type_barplots_PBTA/molecular_subtype_PBTA_plots/Embryonal_tumor_with_multilayer_rosettes_Alteration_type_timepoints_molecular_subtype_barplots_PBTA.pdf"
[1] 25
[1] "/Users/chronia/CHOP/GitHub/pbta-tumor-evolution/analyses/tmb-vaf-longitudinal/plots/Alteration_type_barplots_PBTA/molecular_subtype_PBTA_plots/Ependymoma_Alteration_type_timepoints_molecular_subtype_barplots_PBTA.pdf"
[1] 26
[1] "/Users/chronia/CHOP/GitHub/pbta-tumor-evolution/analyses/tmb-vaf-longitudinal/plots/Alteration_type_barplots_PBTA/molecular_subtype_PBTA_plots/Epstein_Barr_virus-related_tumor_Alteration_type_timepoints_molecular_subtype_barplots_PBTA.pdf"
[1] 27
[1] "/Users/chronia/CHOP/GitHub/pbta-tumor-evolution/analyses/tmb-vaf-longitudinal/plots/Alteration_type_barplots_PBTA/molecular_subtype_PBTA_plots/Ewing_sarcoma_Alteration_type_timepoints_molecular_subtype_barplots_PBTA.pdf"
[1] 28
[1] "/Users/chronia/CHOP/GitHub/pbta-tumor-evolution/analyses/tmb-vaf-longitudinal/plots/Alteration_type_barplots_PBTA/molecular_subtype_PBTA_plots/Extraventricular_neurocytoma_Alteration_type_timepoints_molecular_subtype_barplots_PBTA.pdf"
[1] 29
[1] "/Users/chronia/CHOP/GitHub/pbta-tumor-evolution/analyses/tmb-vaf-longitudinal/plots/Alteration_type_barplots_PBTA/molecular_subtype_PBTA_plots/Ganglioglioma_Alteration_type_timepoints_molecular_subtype_barplots_PBTA.pdf"
[1] 30
[1] "/Users/chronia/CHOP/GitHub/pbta-tumor-evolution/analyses/tmb-vaf-longitudinal/plots/Alteration_type_barplots_PBTA/molecular_subtype_PBTA_plots/Ganglioneuroblastoma_Alteration_type_timepoints_molecular_subtype_barplots_PBTA.pdf"
[1] 31
[1] "/Users/chronia/CHOP/GitHub/pbta-tumor-evolution/analyses/tmb-vaf-longitudinal/plots/Alteration_type_barplots_PBTA/molecular_subtype_PBTA_plots/Ganglioneuroma_Alteration_type_timepoints_molecular_subtype_barplots_PBTA.pdf"
[1] 32
[1] "/Users/chronia/CHOP/GitHub/pbta-tumor-evolution/analyses/tmb-vaf-longitudinal/plots/Alteration_type_barplots_PBTA/molecular_subtype_PBTA_plots/Germinoma_Alteration_type_timepoints_molecular_subtype_barplots_PBTA.pdf"
[1] 33
[1] "/Users/chronia/CHOP/GitHub/pbta-tumor-evolution/analyses/tmb-vaf-longitudinal/plots/Alteration_type_barplots_PBTA/molecular_subtype_PBTA_plots/Glial_neuronal_tumor_Alteration_type_timepoints_molecular_subtype_barplots_PBTA.pdf"
[1] 34
[1] "/Users/chronia/CHOP/GitHub/pbta-tumor-evolution/analyses/tmb-vaf-longitudinal/plots/Alteration_type_barplots_PBTA/molecular_subtype_PBTA_plots/Glioblastoma_Alteration_type_timepoints_molecular_subtype_barplots_PBTA.pdf"
[1] 35
[1] "/Users/chronia/CHOP/GitHub/pbta-tumor-evolution/analyses/tmb-vaf-longitudinal/plots/Alteration_type_barplots_PBTA/molecular_subtype_PBTA_plots/Hemangioblastoma_Alteration_type_timepoints_molecular_subtype_barplots_PBTA.pdf"
[1] 36
[1] "/Users/chronia/CHOP/GitHub/pbta-tumor-evolution/analyses/tmb-vaf-longitudinal/plots/Alteration_type_barplots_PBTA/molecular_subtype_PBTA_plots/High_grade_glioma_Alteration_type_timepoints_molecular_subtype_barplots_PBTA.pdf"
[1] 37
[1] "/Users/chronia/CHOP/GitHub/pbta-tumor-evolution/analyses/tmb-vaf-longitudinal/plots/Alteration_type_barplots_PBTA/molecular_subtype_PBTA_plots/Histiocytic_tumor_Alteration_type_timepoints_molecular_subtype_barplots_PBTA.pdf"
[1] 38
[1] "/Users/chronia/CHOP/GitHub/pbta-tumor-evolution/analyses/tmb-vaf-longitudinal/plots/Alteration_type_barplots_PBTA/molecular_subtype_PBTA_plots/Infant_type_hemispheric_glioma_Alteration_type_timepoints_molecular_subtype_barplots_PBTA.pdf"
[1] 39
[1] "/Users/chronia/CHOP/GitHub/pbta-tumor-evolution/analyses/tmb-vaf-longitudinal/plots/Alteration_type_barplots_PBTA/molecular_subtype_PBTA_plots/Inflammatory_Myofibroblastic_Tumor_Alteration_type_timepoints_molecular_subtype_barplots_PBTA.pdf"
[1] 40
[1] "/Users/chronia/CHOP/GitHub/pbta-tumor-evolution/analyses/tmb-vaf-longitudinal/plots/Alteration_type_barplots_PBTA/molecular_subtype_PBTA_plots/Langerhans_Cell_histiocytosis_Alteration_type_timepoints_molecular_subtype_barplots_PBTA.pdf"
[1] 41
[1] "/Users/chronia/CHOP/GitHub/pbta-tumor-evolution/analyses/tmb-vaf-longitudinal/plots/Alteration_type_barplots_PBTA/molecular_subtype_PBTA_plots/Low_grade_glioma_Alteration_type_timepoints_molecular_subtype_barplots_PBTA.pdf"
[1] 42
[1] "/Users/chronia/CHOP/GitHub/pbta-tumor-evolution/analyses/tmb-vaf-longitudinal/plots/Alteration_type_barplots_PBTA/molecular_subtype_PBTA_plots/Malignant_peripheral_nerve_sheath_tumor_Alteration_type_timepoints_molecular_subtype_barplots_PBTA.pdf"
[1] 43
[1] "/Users/chronia/CHOP/GitHub/pbta-tumor-evolution/analyses/tmb-vaf-longitudinal/plots/Alteration_type_barplots_PBTA/molecular_subtype_PBTA_plots/Medulloblastoma_Alteration_type_timepoints_molecular_subtype_barplots_PBTA.pdf"
[1] 44
[1] "/Users/chronia/CHOP/GitHub/pbta-tumor-evolution/analyses/tmb-vaf-longitudinal/plots/Alteration_type_barplots_PBTA/molecular_subtype_PBTA_plots/Melanocytic_tumor_Alteration_type_timepoints_molecular_subtype_barplots_PBTA.pdf"
[1] 45
[1] "/Users/chronia/CHOP/GitHub/pbta-tumor-evolution/analyses/tmb-vaf-longitudinal/plots/Alteration_type_barplots_PBTA/molecular_subtype_PBTA_plots/Meningioma_Alteration_type_timepoints_molecular_subtype_barplots_PBTA.pdf"
[1] 46
[1] "/Users/chronia/CHOP/GitHub/pbta-tumor-evolution/analyses/tmb-vaf-longitudinal/plots/Alteration_type_barplots_PBTA/molecular_subtype_PBTA_plots/Mesenchymal_tumor_Alteration_type_timepoints_molecular_subtype_barplots_PBTA.pdf"
[1] 47
[1] "/Users/chronia/CHOP/GitHub/pbta-tumor-evolution/analyses/tmb-vaf-longitudinal/plots/Alteration_type_barplots_PBTA/molecular_subtype_PBTA_plots/Metastatic_secondary_tumors_Alteration_type_timepoints_molecular_subtype_barplots_PBTA.pdf"
[1] 48
[1] "/Users/chronia/CHOP/GitHub/pbta-tumor-evolution/analyses/tmb-vaf-longitudinal/plots/Alteration_type_barplots_PBTA/molecular_subtype_PBTA_plots/Mixed_germ_cell_tumor_Alteration_type_timepoints_molecular_subtype_barplots_PBTA.pdf"
[1] 49
[1] "/Users/chronia/CHOP/GitHub/pbta-tumor-evolution/analyses/tmb-vaf-longitudinal/plots/Alteration_type_barplots_PBTA/molecular_subtype_PBTA_plots/Neuroblastoma_Alteration_type_timepoints_molecular_subtype_barplots_PBTA.pdf"
[1] 50
[1] "/Users/chronia/CHOP/GitHub/pbta-tumor-evolution/analyses/tmb-vaf-longitudinal/plots/Alteration_type_barplots_PBTA/molecular_subtype_PBTA_plots/Neurofibroma_Plexiform_Alteration_type_timepoints_molecular_subtype_barplots_PBTA.pdf"
[1] 51
[1] "/Users/chronia/CHOP/GitHub/pbta-tumor-evolution/analyses/tmb-vaf-longitudinal/plots/Alteration_type_barplots_PBTA/molecular_subtype_PBTA_plots/Non_germinomatous_germ_cell_tumor_Alteration_type_timepoints_molecular_subtype_barplots_PBTA.pdf"
[1] 52
[1] "/Users/chronia/CHOP/GitHub/pbta-tumor-evolution/analyses/tmb-vaf-longitudinal/plots/Alteration_type_barplots_PBTA/molecular_subtype_PBTA_plots/Oligodendroglioma_Alteration_type_timepoints_molecular_subtype_barplots_PBTA.pdf"
[1] 53
[1] "/Users/chronia/CHOP/GitHub/pbta-tumor-evolution/analyses/tmb-vaf-longitudinal/plots/Alteration_type_barplots_PBTA/molecular_subtype_PBTA_plots/Perineuroma_Alteration_type_timepoints_molecular_subtype_barplots_PBTA.pdf"
[1] 54
[1] "/Users/chronia/CHOP/GitHub/pbta-tumor-evolution/analyses/tmb-vaf-longitudinal/plots/Alteration_type_barplots_PBTA/molecular_subtype_PBTA_plots/Pilocytic_astrocytoma_Alteration_type_timepoints_molecular_subtype_barplots_PBTA.pdf"
[1] 55
[1] "/Users/chronia/CHOP/GitHub/pbta-tumor-evolution/analyses/tmb-vaf-longitudinal/plots/Alteration_type_barplots_PBTA/molecular_subtype_PBTA_plots/Pineoblastoma_Alteration_type_timepoints_molecular_subtype_barplots_PBTA.pdf"
[1] 56
[1] "/Users/chronia/CHOP/GitHub/pbta-tumor-evolution/analyses/tmb-vaf-longitudinal/plots/Alteration_type_barplots_PBTA/molecular_subtype_PBTA_plots/Pleomorphic_xanthoastrocytoma_Alteration_type_timepoints_molecular_subtype_barplots_PBTA.pdf"
[1] 57
[1] "/Users/chronia/CHOP/GitHub/pbta-tumor-evolution/analyses/tmb-vaf-longitudinal/plots/Alteration_type_barplots_PBTA/molecular_subtype_PBTA_plots/Rhabdomyosarcoma_Alteration_type_timepoints_molecular_subtype_barplots_PBTA.pdf"
[1] 58
[1] "/Users/chronia/CHOP/GitHub/pbta-tumor-evolution/analyses/tmb-vaf-longitudinal/plots/Alteration_type_barplots_PBTA/molecular_subtype_PBTA_plots/Rosai_Dorfman_disease_Alteration_type_timepoints_molecular_subtype_barplots_PBTA.pdf"
[1] 59
[1] "/Users/chronia/CHOP/GitHub/pbta-tumor-evolution/analyses/tmb-vaf-longitudinal/plots/Alteration_type_barplots_PBTA/molecular_subtype_PBTA_plots/Rosette_forming_glioneuronal_tumor_Alteration_type_timepoints_molecular_subtype_barplots_PBTA.pdf"
[1] 60
[1] "/Users/chronia/CHOP/GitHub/pbta-tumor-evolution/analyses/tmb-vaf-longitudinal/plots/Alteration_type_barplots_PBTA/molecular_subtype_PBTA_plots/Sarcoma_Alteration_type_timepoints_molecular_subtype_barplots_PBTA.pdf"
[1] 61
[1] "/Users/chronia/CHOP/GitHub/pbta-tumor-evolution/analyses/tmb-vaf-longitudinal/plots/Alteration_type_barplots_PBTA/molecular_subtype_PBTA_plots/Schwannoma_Alteration_type_timepoints_molecular_subtype_barplots_PBTA.pdf"
[1] 62
[1] "/Users/chronia/CHOP/GitHub/pbta-tumor-evolution/analyses/tmb-vaf-longitudinal/plots/Alteration_type_barplots_PBTA/molecular_subtype_PBTA_plots/Subependymal_Giant_Cell_Astrocytoma_Alteration_type_timepoints_molecular_subtype_barplots_PBTA.pdf"
[1] 63
[1] "/Users/chronia/CHOP/GitHub/pbta-tumor-evolution/analyses/tmb-vaf-longitudinal/plots/Alteration_type_barplots_PBTA/molecular_subtype_PBTA_plots/Teratoma_Alteration_type_timepoints_molecular_subtype_barplots_PBTA.pdf"

Alterations per timepoint in each cancer type, molecular, and kids_id

PR cohort with molecular subtype

cg_df <- PR_count_df %>%
  # Fix syntax in cancer groups names 
  mutate(cg_id = str_replace_all(cg_id, " ", "_")) %>% 
  arrange(tumor_descriptor, desc(molecular_subtype))

sample <- as.character(unique(cg_df$cg_id)) 
sample <- sort(sample, decreasing = FALSE)
sample
 [1] "Adamantinomatous_Craniopharyngioma"       "Atypical_Teratoid_Rhabdoid_Tumor"         "Chordoma"                                
 [4] "Choroid_plexus_carcinoma"                 "CNS_Embryonal_tumor"                      "Craniopharyngioma"                       
 [7] "Diffuse_midline_glioma"                   "Dysembryoplastic_neuroepithelial_tumor"   "Embryonal_tumor_with_multilayer_rosettes"
[10] "Ependymoma"                               "Ewing_sarcoma"                            "Ganglioglioma"                           
[13] "Glial_neuronal_tumor"                     "Hemangioblastoma"                         "High_grade_glioma"                       
[16] "Low_grade_glioma"                         "Malignant_peripheral_nerve_sheath_tumor"  "Medulloblastoma"                         
[19] "Meningioma"                               "Neuroblastoma"                            "Neurofibroma_Plexiform"                  
[22] "Pilocytic_astrocytoma"                    "Schwannoma"                              
# Loop through variable
for (i in seq_along(sample)){
  print(i)
  df_sub <- cg_df %>%
    filter(cg_id == sample[i]) 

  if (i %in% c(2, 7, 15, 18)){
    width_value = 25
    }else if (i %in% c(10, 16)){
    width_value = 28
    }else{
    width_value = 10
      }

  # Define parameters for function
  x_value <- df_sub$tumor_descriptor
  title <- paste(sample[i], "Variants across samples", sep = ": ")
  rows_value <- 1
  
  # Run function
  fname <- paste0(kids_molecular_subtype_PR_plots_dir, "/", sample[i], "_Alteration_type_timepoints_kids_barplots_PR.pdf")
  print(fname)
  p <- create_stacked_barplot_variant_kids(df = df_sub, x = x_value, palette = palette, title = title, rows = rows_value)
  pdf(file = fname, width = width_value, height = 6)
  print(p)
  dev.off()
  }
[1] 1
[1] "/Users/chronia/CHOP/GitHub/pbta-tumor-evolution/analyses/tmb-vaf-longitudinal/plots/Alteration_type_barplots_PR/kids_PR_plots/Adamantinomatous_Craniopharyngioma_Alteration_type_timepoints_kids_barplots_PR.pdf"
[1] 2
[1] "/Users/chronia/CHOP/GitHub/pbta-tumor-evolution/analyses/tmb-vaf-longitudinal/plots/Alteration_type_barplots_PR/kids_PR_plots/Atypical_Teratoid_Rhabdoid_Tumor_Alteration_type_timepoints_kids_barplots_PR.pdf"
[1] 3
[1] "/Users/chronia/CHOP/GitHub/pbta-tumor-evolution/analyses/tmb-vaf-longitudinal/plots/Alteration_type_barplots_PR/kids_PR_plots/Chordoma_Alteration_type_timepoints_kids_barplots_PR.pdf"
[1] 4
[1] "/Users/chronia/CHOP/GitHub/pbta-tumor-evolution/analyses/tmb-vaf-longitudinal/plots/Alteration_type_barplots_PR/kids_PR_plots/Choroid_plexus_carcinoma_Alteration_type_timepoints_kids_barplots_PR.pdf"
[1] 5
[1] "/Users/chronia/CHOP/GitHub/pbta-tumor-evolution/analyses/tmb-vaf-longitudinal/plots/Alteration_type_barplots_PR/kids_PR_plots/CNS_Embryonal_tumor_Alteration_type_timepoints_kids_barplots_PR.pdf"
[1] 6
[1] "/Users/chronia/CHOP/GitHub/pbta-tumor-evolution/analyses/tmb-vaf-longitudinal/plots/Alteration_type_barplots_PR/kids_PR_plots/Craniopharyngioma_Alteration_type_timepoints_kids_barplots_PR.pdf"
[1] 7
[1] "/Users/chronia/CHOP/GitHub/pbta-tumor-evolution/analyses/tmb-vaf-longitudinal/plots/Alteration_type_barplots_PR/kids_PR_plots/Diffuse_midline_glioma_Alteration_type_timepoints_kids_barplots_PR.pdf"
[1] 8
[1] "/Users/chronia/CHOP/GitHub/pbta-tumor-evolution/analyses/tmb-vaf-longitudinal/plots/Alteration_type_barplots_PR/kids_PR_plots/Dysembryoplastic_neuroepithelial_tumor_Alteration_type_timepoints_kids_barplots_PR.pdf"
[1] 9
[1] "/Users/chronia/CHOP/GitHub/pbta-tumor-evolution/analyses/tmb-vaf-longitudinal/plots/Alteration_type_barplots_PR/kids_PR_plots/Embryonal_tumor_with_multilayer_rosettes_Alteration_type_timepoints_kids_barplots_PR.pdf"
[1] 10
[1] "/Users/chronia/CHOP/GitHub/pbta-tumor-evolution/analyses/tmb-vaf-longitudinal/plots/Alteration_type_barplots_PR/kids_PR_plots/Ependymoma_Alteration_type_timepoints_kids_barplots_PR.pdf"
[1] 11
[1] "/Users/chronia/CHOP/GitHub/pbta-tumor-evolution/analyses/tmb-vaf-longitudinal/plots/Alteration_type_barplots_PR/kids_PR_plots/Ewing_sarcoma_Alteration_type_timepoints_kids_barplots_PR.pdf"
[1] 12
[1] "/Users/chronia/CHOP/GitHub/pbta-tumor-evolution/analyses/tmb-vaf-longitudinal/plots/Alteration_type_barplots_PR/kids_PR_plots/Ganglioglioma_Alteration_type_timepoints_kids_barplots_PR.pdf"
[1] 13
[1] "/Users/chronia/CHOP/GitHub/pbta-tumor-evolution/analyses/tmb-vaf-longitudinal/plots/Alteration_type_barplots_PR/kids_PR_plots/Glial_neuronal_tumor_Alteration_type_timepoints_kids_barplots_PR.pdf"
[1] 14
[1] "/Users/chronia/CHOP/GitHub/pbta-tumor-evolution/analyses/tmb-vaf-longitudinal/plots/Alteration_type_barplots_PR/kids_PR_plots/Hemangioblastoma_Alteration_type_timepoints_kids_barplots_PR.pdf"
[1] 15
[1] "/Users/chronia/CHOP/GitHub/pbta-tumor-evolution/analyses/tmb-vaf-longitudinal/plots/Alteration_type_barplots_PR/kids_PR_plots/High_grade_glioma_Alteration_type_timepoints_kids_barplots_PR.pdf"
[1] 16
[1] "/Users/chronia/CHOP/GitHub/pbta-tumor-evolution/analyses/tmb-vaf-longitudinal/plots/Alteration_type_barplots_PR/kids_PR_plots/Low_grade_glioma_Alteration_type_timepoints_kids_barplots_PR.pdf"
[1] 17
[1] "/Users/chronia/CHOP/GitHub/pbta-tumor-evolution/analyses/tmb-vaf-longitudinal/plots/Alteration_type_barplots_PR/kids_PR_plots/Malignant_peripheral_nerve_sheath_tumor_Alteration_type_timepoints_kids_barplots_PR.pdf"
[1] 18
[1] "/Users/chronia/CHOP/GitHub/pbta-tumor-evolution/analyses/tmb-vaf-longitudinal/plots/Alteration_type_barplots_PR/kids_PR_plots/Medulloblastoma_Alteration_type_timepoints_kids_barplots_PR.pdf"
[1] 19
[1] "/Users/chronia/CHOP/GitHub/pbta-tumor-evolution/analyses/tmb-vaf-longitudinal/plots/Alteration_type_barplots_PR/kids_PR_plots/Meningioma_Alteration_type_timepoints_kids_barplots_PR.pdf"
[1] 20
[1] "/Users/chronia/CHOP/GitHub/pbta-tumor-evolution/analyses/tmb-vaf-longitudinal/plots/Alteration_type_barplots_PR/kids_PR_plots/Neuroblastoma_Alteration_type_timepoints_kids_barplots_PR.pdf"
[1] 21
[1] "/Users/chronia/CHOP/GitHub/pbta-tumor-evolution/analyses/tmb-vaf-longitudinal/plots/Alteration_type_barplots_PR/kids_PR_plots/Neurofibroma_Plexiform_Alteration_type_timepoints_kids_barplots_PR.pdf"
[1] 22
[1] "/Users/chronia/CHOP/GitHub/pbta-tumor-evolution/analyses/tmb-vaf-longitudinal/plots/Alteration_type_barplots_PR/kids_PR_plots/Pilocytic_astrocytoma_Alteration_type_timepoints_kids_barplots_PR.pdf"
[1] 23
[1] "/Users/chronia/CHOP/GitHub/pbta-tumor-evolution/analyses/tmb-vaf-longitudinal/plots/Alteration_type_barplots_PR/kids_PR_plots/Schwannoma_Alteration_type_timepoints_kids_barplots_PR.pdf"

PR cohort without molecular subtype

cg_df <- PR_count_df %>%
  # Fix syntax in cancer groups names 
  mutate(cg_id = str_replace_all(cg_id, " ", "_"))

sample <- as.character(unique(cg_df$cg_id)) 
sample <- sort(sample, decreasing = FALSE)
sample
 [1] "Adamantinomatous_Craniopharyngioma"       "Atypical_Teratoid_Rhabdoid_Tumor"         "Chordoma"                                
 [4] "Choroid_plexus_carcinoma"                 "CNS_Embryonal_tumor"                      "Craniopharyngioma"                       
 [7] "Diffuse_midline_glioma"                   "Dysembryoplastic_neuroepithelial_tumor"   "Embryonal_tumor_with_multilayer_rosettes"
[10] "Ependymoma"                               "Ewing_sarcoma"                            "Ganglioglioma"                           
[13] "Glial_neuronal_tumor"                     "Hemangioblastoma"                         "High_grade_glioma"                       
[16] "Low_grade_glioma"                         "Malignant_peripheral_nerve_sheath_tumor"  "Medulloblastoma"                         
[19] "Meningioma"                               "Neuroblastoma"                            "Neurofibroma_Plexiform"                  
[22] "Pilocytic_astrocytoma"                    "Schwannoma"                              
# Loop through variable
for (i in seq_along(sample)){
  print(i)
  df_sub <- cg_df %>%
    filter(cg_id == sample[i]) 

  if (i %in% c(2, 7, 15, 18)){
    width_value = 25
    }else if (i %in% c(10, 16)){
    width_value = 28
    }else{
    width_value = 10
      }

  # Define parameters for function
  x_value <- df_sub$tumor_descriptor
  title <- paste(sample[i], "Variants across samples", sep = ": ")
  rows <- 1
  
  # Run function
  fname <- paste0(kids_PR_plots_dir, "/", sample[i], "_Alteration_type_timepoints_kids_barplots_PR.pdf")
  print(fname)
  p <- create_stacked_barplot_variant_kids(df = df_sub, x = x_value, palette = palette, title = title, rows = rows)
  pdf(file = fname, width = width_value, height = 6)
  print(p)
  dev.off()
  }
[1] 1
[1] "/Users/chronia/CHOP/GitHub/pbta-tumor-evolution/analyses/tmb-vaf-longitudinal/plots/Alteration_type_barplots_PR/kids_PR_plots/Adamantinomatous_Craniopharyngioma_Alteration_type_timepoints_kids_barplots_PR.pdf"
[1] 2
[1] "/Users/chronia/CHOP/GitHub/pbta-tumor-evolution/analyses/tmb-vaf-longitudinal/plots/Alteration_type_barplots_PR/kids_PR_plots/Atypical_Teratoid_Rhabdoid_Tumor_Alteration_type_timepoints_kids_barplots_PR.pdf"
[1] 3
[1] "/Users/chronia/CHOP/GitHub/pbta-tumor-evolution/analyses/tmb-vaf-longitudinal/plots/Alteration_type_barplots_PR/kids_PR_plots/Chordoma_Alteration_type_timepoints_kids_barplots_PR.pdf"
[1] 4
[1] "/Users/chronia/CHOP/GitHub/pbta-tumor-evolution/analyses/tmb-vaf-longitudinal/plots/Alteration_type_barplots_PR/kids_PR_plots/Choroid_plexus_carcinoma_Alteration_type_timepoints_kids_barplots_PR.pdf"
[1] 5
[1] "/Users/chronia/CHOP/GitHub/pbta-tumor-evolution/analyses/tmb-vaf-longitudinal/plots/Alteration_type_barplots_PR/kids_PR_plots/CNS_Embryonal_tumor_Alteration_type_timepoints_kids_barplots_PR.pdf"
[1] 6
[1] "/Users/chronia/CHOP/GitHub/pbta-tumor-evolution/analyses/tmb-vaf-longitudinal/plots/Alteration_type_barplots_PR/kids_PR_plots/Craniopharyngioma_Alteration_type_timepoints_kids_barplots_PR.pdf"
[1] 7
[1] "/Users/chronia/CHOP/GitHub/pbta-tumor-evolution/analyses/tmb-vaf-longitudinal/plots/Alteration_type_barplots_PR/kids_PR_plots/Diffuse_midline_glioma_Alteration_type_timepoints_kids_barplots_PR.pdf"
[1] 8
[1] "/Users/chronia/CHOP/GitHub/pbta-tumor-evolution/analyses/tmb-vaf-longitudinal/plots/Alteration_type_barplots_PR/kids_PR_plots/Dysembryoplastic_neuroepithelial_tumor_Alteration_type_timepoints_kids_barplots_PR.pdf"
[1] 9
[1] "/Users/chronia/CHOP/GitHub/pbta-tumor-evolution/analyses/tmb-vaf-longitudinal/plots/Alteration_type_barplots_PR/kids_PR_plots/Embryonal_tumor_with_multilayer_rosettes_Alteration_type_timepoints_kids_barplots_PR.pdf"
[1] 10
[1] "/Users/chronia/CHOP/GitHub/pbta-tumor-evolution/analyses/tmb-vaf-longitudinal/plots/Alteration_type_barplots_PR/kids_PR_plots/Ependymoma_Alteration_type_timepoints_kids_barplots_PR.pdf"
[1] 11
[1] "/Users/chronia/CHOP/GitHub/pbta-tumor-evolution/analyses/tmb-vaf-longitudinal/plots/Alteration_type_barplots_PR/kids_PR_plots/Ewing_sarcoma_Alteration_type_timepoints_kids_barplots_PR.pdf"
[1] 12
[1] "/Users/chronia/CHOP/GitHub/pbta-tumor-evolution/analyses/tmb-vaf-longitudinal/plots/Alteration_type_barplots_PR/kids_PR_plots/Ganglioglioma_Alteration_type_timepoints_kids_barplots_PR.pdf"
[1] 13
[1] "/Users/chronia/CHOP/GitHub/pbta-tumor-evolution/analyses/tmb-vaf-longitudinal/plots/Alteration_type_barplots_PR/kids_PR_plots/Glial_neuronal_tumor_Alteration_type_timepoints_kids_barplots_PR.pdf"
[1] 14
[1] "/Users/chronia/CHOP/GitHub/pbta-tumor-evolution/analyses/tmb-vaf-longitudinal/plots/Alteration_type_barplots_PR/kids_PR_plots/Hemangioblastoma_Alteration_type_timepoints_kids_barplots_PR.pdf"
[1] 15
[1] "/Users/chronia/CHOP/GitHub/pbta-tumor-evolution/analyses/tmb-vaf-longitudinal/plots/Alteration_type_barplots_PR/kids_PR_plots/High_grade_glioma_Alteration_type_timepoints_kids_barplots_PR.pdf"
[1] 16
[1] "/Users/chronia/CHOP/GitHub/pbta-tumor-evolution/analyses/tmb-vaf-longitudinal/plots/Alteration_type_barplots_PR/kids_PR_plots/Low_grade_glioma_Alteration_type_timepoints_kids_barplots_PR.pdf"
[1] 17
[1] "/Users/chronia/CHOP/GitHub/pbta-tumor-evolution/analyses/tmb-vaf-longitudinal/plots/Alteration_type_barplots_PR/kids_PR_plots/Malignant_peripheral_nerve_sheath_tumor_Alteration_type_timepoints_kids_barplots_PR.pdf"
[1] 18
[1] "/Users/chronia/CHOP/GitHub/pbta-tumor-evolution/analyses/tmb-vaf-longitudinal/plots/Alteration_type_barplots_PR/kids_PR_plots/Medulloblastoma_Alteration_type_timepoints_kids_barplots_PR.pdf"
[1] 19
[1] "/Users/chronia/CHOP/GitHub/pbta-tumor-evolution/analyses/tmb-vaf-longitudinal/plots/Alteration_type_barplots_PR/kids_PR_plots/Meningioma_Alteration_type_timepoints_kids_barplots_PR.pdf"
[1] 20
[1] "/Users/chronia/CHOP/GitHub/pbta-tumor-evolution/analyses/tmb-vaf-longitudinal/plots/Alteration_type_barplots_PR/kids_PR_plots/Neuroblastoma_Alteration_type_timepoints_kids_barplots_PR.pdf"
[1] 21
[1] "/Users/chronia/CHOP/GitHub/pbta-tumor-evolution/analyses/tmb-vaf-longitudinal/plots/Alteration_type_barplots_PR/kids_PR_plots/Neurofibroma_Plexiform_Alteration_type_timepoints_kids_barplots_PR.pdf"
[1] 22
[1] "/Users/chronia/CHOP/GitHub/pbta-tumor-evolution/analyses/tmb-vaf-longitudinal/plots/Alteration_type_barplots_PR/kids_PR_plots/Pilocytic_astrocytoma_Alteration_type_timepoints_kids_barplots_PR.pdf"
[1] 23
[1] "/Users/chronia/CHOP/GitHub/pbta-tumor-evolution/analyses/tmb-vaf-longitudinal/plots/Alteration_type_barplots_PR/kids_PR_plots/Schwannoma_Alteration_type_timepoints_kids_barplots_PR.pdf"

sessionInfo()
R version 4.3.1 (2023-06-16)
Platform: x86_64-apple-darwin20 (64-bit)
Running under: macOS Ventura 13.6

Matrix products: default
BLAS:   /System/Library/Frameworks/Accelerate.framework/Versions/A/Frameworks/vecLib.framework/Versions/A/libBLAS.dylib 
LAPACK: /Library/Frameworks/R.framework/Versions/4.3-x86_64/Resources/lib/libRlapack.dylib;  LAPACK version 3.11.0

locale:
[1] en_US.UTF-8/en_US.UTF-8/en_US.UTF-8/C/en_US.UTF-8/en_US.UTF-8

time zone: America/New_York
tzcode source: internal

attached base packages:
[1] stats4    grid      stats     graphics  grDevices utils     datasets  methods   base     

other attached packages:
 [1] Matrix_1.6-1.1              future_1.33.0               scater_1.30.0               scuttle_1.12.0              SeuratObject_5.0.0         
 [6] Seurat_4.4.0                scDblFinder_1.16.0          SingleCellExperiment_1.24.0 SummarizedExperiment_1.32.0 Biobase_2.62.0             
[11] GenomicRanges_1.54.1        GenomeInfoDb_1.38.0         IRanges_2.36.0              S4Vectors_0.40.1            BiocGenerics_0.48.0        
[16] MatrixGenerics_1.14.0       matrixStats_1.0.0           ggthemes_4.2.4              ggpubr_0.6.0                rstatix_0.7.2              
[21] flextable_0.9.4             reshape_0.8.9               ComplexHeatmap_2.18.0       lubridate_1.9.3             forcats_1.0.0              
[26] stringr_1.5.0               dplyr_1.1.3                 purrr_1.0.2                 readr_2.1.4                 tidyr_1.3.0                
[31] tibble_3.2.1                ggplot2_3.4.4               tidyverse_2.0.0            

loaded via a namespace (and not attached):
  [1] spatstat.sparse_3.0-3     bitops_1.0-7              httr_1.4.7                RColorBrewer_1.1-3        doParallel_1.0.17         sctransform_0.4.1        
  [7] tools_4.3.1               backports_1.4.1           utf8_1.2.4                R6_2.5.1                  uwot_0.1.16               lazyeval_0.2.2           
 [13] GetoptLong_1.0.5          withr_2.5.2               sp_2.1-1                  gridExtra_2.3             progressr_0.14.0          cli_3.6.1                
 [19] textshaping_0.3.7         spatstat.explore_3.2-5    officer_0.6.3             labeling_0.4.3            sass_0.4.7                spatstat.data_3.0-3      
 [25] pbapply_1.7-2             ggridges_0.5.4            askpass_1.2.0             Rsamtools_2.18.0          systemfonts_1.0.5         gfonts_0.2.0             
 [31] parallelly_1.36.0         limma_3.58.1              rstudioapi_0.15.0         httpcode_0.3.0            generics_0.1.3            shape_1.4.6              
 [37] BiocIO_1.12.0             spatstat.random_3.2-1     ica_1.0-3                 vroom_1.6.4               car_3.1-2                 zip_2.3.0                
 [43] ggbeeswarm_0.7.2          fansi_1.0.5               abind_1.4-5               lifecycle_1.0.3           yaml_2.3.7                edgeR_4.0.1              
 [49] carData_3.0-5             SparseArray_1.2.0         Rtsne_0.16                promises_1.2.1            dqrng_0.3.1               crayon_1.5.2             
 [55] miniUI_0.1.1.1            lattice_0.22-5            beachmat_2.18.0           cowplot_1.1.1             pillar_1.9.0              knitr_1.45               
 [61] metapod_1.10.0            rjson_0.2.21              xgboost_1.7.5.1           future.apply_1.11.0       codetools_0.2-19          leiden_0.4.3             
 [67] glue_1.6.2                fontLiberation_0.1.0      data.table_1.14.8         vctrs_0.6.4               png_0.1-8                 spam_2.10-0              
 [73] gtable_0.3.4              cachem_1.0.8              xfun_0.41                 S4Arrays_1.2.0            mime_0.12                 survival_3.5-7           
 [79] iterators_1.0.14          statmod_1.5.0             bluster_1.12.0            ellipsis_0.3.2            fitdistrplus_1.1-11       ROCR_1.0-11              
 [85] nlme_3.1-163              bit64_4.0.5               fontquiver_0.2.1          RcppAnnoy_0.0.21          rprojroot_2.0.3           bslib_0.5.1              
 [91] irlba_2.3.5.1             vipor_0.4.5               KernSmooth_2.23-22        colorspace_2.1-0          tidyselect_1.2.0          bit_4.0.5                
 [97] compiler_4.3.1            curl_5.1.0                BiocNeighbors_1.20.0      xml2_1.3.5                plotly_4.10.3             fontBitstreamVera_0.1.1  
[103] DelayedArray_0.28.0       rtracklayer_1.62.0        scales_1.2.1              lmtest_0.9-40             goftest_1.2-3             digest_0.6.33            
[109] spatstat.utils_3.0-4      rmarkdown_2.25            XVector_0.42.0            htmltools_0.5.6.1         pkgconfig_2.0.3           sparseMatrixStats_1.14.0 
[115] fastmap_1.1.1             htmlwidgets_1.6.2         rlang_1.1.1               GlobalOptions_0.1.2       shiny_1.7.5.1             DelayedMatrixStats_1.24.0
[121] farver_2.1.1              jquerylib_0.1.4           zoo_1.8-12                jsonlite_1.8.7            BiocParallel_1.36.0       BiocSingular_1.18.0      
[127] RCurl_1.98-1.12           magrittr_2.0.3            GenomeInfoDbData_1.2.11   dotCall64_1.1-0           patchwork_1.1.3           munsell_0.5.0            
[133] Rcpp_1.0.11               viridis_0.6.4             gdtools_0.3.4             reticulate_1.34.0         stringi_1.7.12            zlibbioc_1.48.0          
[139] MASS_7.3-60               plyr_1.8.9                parallel_4.3.1            listenv_0.9.0             ggrepel_0.9.4             deldir_1.0-9             
[145] Biostrings_2.70.1         splines_4.3.1             tensor_1.5                hms_1.1.3                 circlize_0.4.15           locfit_1.5-9.8           
[151] igraph_1.5.1              uuid_1.1-1                spatstat.geom_3.2-7       ggsignif_0.6.4            reshape2_1.4.4            ScaledMatrix_1.10.0      
[157] crul_1.4.0                XML_3.99-0.14             evaluate_0.23             scran_1.30.0              tzdb_0.4.0                foreach_1.5.2            
[163] httpuv_1.6.12             polyclip_1.10-6           RANN_2.6.1                openssl_2.1.1             scattermore_1.2           clue_0.3-65              
[169] rsvd_1.0.5                broom_1.0.5               xtable_1.8-4              restfulr_0.0.15           later_1.3.1               viridisLite_0.4.2        
[175] ragg_1.2.6                beeswarm_0.4.0            GenomicAlignments_1.38.0  cluster_2.1.4             timechange_0.2.0          globals_0.16.2           
LS0tCnRpdGxlOiAiQ2xhc3NpZmljYXRpb24gb2YgVmFyaWFudHMgaW4gdGhlIHBhaXJlZCBsb25naXR1ZGluYWwgKFBSKSBhbmQgUEJUQSBjb2hvcnRzIgphdXRob3I6ICdBbnRvbmlhIENocm9uaSA8Y2hyb25pYUBjaG9wLmVkdT4gZm9yIEQzQicKZGF0ZTogIjIwMjMiCm91dHB1dDoKICBodG1sX25vdGVib29rOgogICAgdG9jOiBUUlVFCiAgICB0b2NfZmxvYXQ6IFRSVUUKLS0tCgojIFNldCB1cApgYGB7ciBsb2FkLWxpYnJhcnl9CnN1cHByZXNzUGFja2FnZVN0YXJ0dXBNZXNzYWdlcyh7CiAgbGlicmFyeSh0aWR5dmVyc2UpCn0pCmBgYAoKIyBEaXJlY3RvcmllcyBhbmQgRmlsZSBJbnB1dHMvT3V0cHV0cwpgYGB7ciBzZXQtZGlyLWFuZC1maWxlLW5hbWVzfQojIERldGVjdCB0aGUgIi5naXQiIGZvbGRlciAtLSB0aGlzIHdpbGwgYmUgaW4gdGhlIHByb2plY3Qgcm9vdCBkaXJlY3RvcnkKIyBVc2UgdGhpcyBhcyB0aGUgcm9vdCBkaXJlY3RvcnkgdG8gZW5zdXJlIHByb3BlciBzb3VyY2luZyBvZiBmdW5jdGlvbnMgCiMgbm8gbWF0dGVyIHdoZXJlIHRoaXMgaXMgY2FsbGVkIGZyb20Kcm9vdF9kaXIgPC0gcnByb2pyb290OjpmaW5kX3Jvb3QocnByb2pyb290OjpoYXNfZGlyKCIuZ2l0IikpCmFuYWx5c2lzX2RpciA8LSBmaWxlLnBhdGgocm9vdF9kaXIsICJhbmFseXNlcyIsICJ0bWItdmFmLWxvbmdpdHVkaW5hbCIpCnJlc3VsdHNfZGlyIDwtIGZpbGUucGF0aChhbmFseXNpc19kaXIsICJyZXN1bHRzIikKaW5wdXRfZGlyIDwtIGZpbGUucGF0aChhbmFseXNpc19kaXIsICJpbnB1dCIpCmZpbGVzX2RpciA8LSBmaWxlLnBhdGgocm9vdF9kaXIsICJhbmFseXNlcyIsICJzYW1wbGUtZGlzdHJpYnV0aW9uLWFuYWx5c2lzIiwgInJlc3VsdHMiKQoKIyBJbnB1dCBmaWxlcyBmb3IgdGhlIHBhaXJlZCBsb25naXR1ZGluYWwgKFBSKSBjb2hvcnQKcGJ0YV9maWxlIDwtIGZpbGUucGF0aChmaWxlc19kaXIsICJwYnRhLnRzdiIpICMgZmlsZSBmcm9tIGFkZC1zYW1wbGUtZGlzdHJpYnV0aW9uIG1vZHVsZQpnZW5vbWljX3BhaXJlZF9maWxlIDwtIGZpbGUucGF0aChmaWxlc19kaXIsICJnZW5vbWljX2Fzc2F5c19tYXRjaGVkX3RpbWVfcG9pbnRzLnRzdiIpCnRtYl92YWZfZmlsZSA8LSBmaWxlLnBhdGgocmVzdWx0c19kaXIsICJ0bWJfdmFmX2dlbm9taWMudHN2IikKcGFsZXR0ZV9maWxlIDwtIGZpbGUucGF0aChyb290X2RpciwgImZpZ3VyZXMiLCAicGFsZXR0ZXMiLCAib25jb3ByaW50X2NvbG9yX3BhbGV0dGUudHN2IikKCgojIElucHV0IGZpbGVzIGZvciB0aGUgUEJUQSBjb2hvcnQKbWFmX2ZpbGUgPC0gZmlsZS5wYXRoKHJlc3VsdHNfZGlyLCAibWFmLnRzdiIpCnRtYl9maWxlIDwtIGZpbGUucGF0aChpbnB1dF9kaXIsICJzbnYtbXV0YXRpb24tdG1iLWNvZGluZy50c3YiKQoKCiMgRmlsZSBwYXRoIHRvIFBSIHBsb3QgZGlyZWN0b3J5ClBSX3Bsb3RzX2RpciA8LQogIGZpbGUucGF0aChhbmFseXNpc19kaXIsICJwbG90cyIsICJBbHRlcmF0aW9uX3R5cGVfYmFycGxvdHNfUFIiKQppZiAoIWRpci5leGlzdHMoUFJfcGxvdHNfZGlyKSkgewogIGRpci5jcmVhdGUoUFJfcGxvdHNfZGlyKQp9CgojIEZpbGUgcGF0aCB0byBraWRzX1BSX3Bsb3RzIGRpcmVjdG9yeQpraWRzX1BSX3Bsb3RzX2RpciA8LQogIGZpbGUucGF0aChQUl9wbG90c19kaXIsICJraWRzX1BSX3Bsb3RzIikKaWYgKCFkaXIuZXhpc3RzKGtpZHNfUFJfcGxvdHNfZGlyKSkgewogIGRpci5jcmVhdGUoa2lkc19QUl9wbG90c19kaXIpCn0KCiMgRmlsZSBwYXRoIHRvIGtpZHNfbW9sZWN1bGFyX3N1YnR5cGVfUFJfcGxvdHNfZGlyIGRpcmVjdG9yeQpraWRzX21vbGVjdWxhcl9zdWJ0eXBlX1BSX3Bsb3RzX2RpciA8LQogIGZpbGUucGF0aChQUl9wbG90c19kaXIsICJraWRzX1BSX3Bsb3RzIikKaWYgKCFkaXIuZXhpc3RzKGtpZHNfbW9sZWN1bGFyX3N1YnR5cGVfUFJfcGxvdHNfZGlyKSkgewogIGRpci5jcmVhdGUoa2lkc19tb2xlY3VsYXJfc3VidHlwZV9QUl9wbG90c19kaXIpCn0KCgojIEZpbGUgcGF0aCB0byBtb2xlY3VsYXJfc3VidHlwZV9QUl9wbG90cyBkaXJlY3RvcnkKbW9sZWN1bGFyX3N1YnR5cGVfUFJfcGxvdHNfZGlyIDwtCiAgZmlsZS5wYXRoKFBSX3Bsb3RzX2RpciwgIm1vbGVjdWxhcl9zdWJ0eXBlX1BSX3Bsb3RzIikKaWYgKCFkaXIuZXhpc3RzKG1vbGVjdWxhcl9zdWJ0eXBlX1BSX3Bsb3RzX2RpcikpIHsKICBkaXIuY3JlYXRlKG1vbGVjdWxhcl9zdWJ0eXBlX1BSX3Bsb3RzX2RpcikKfQoKIyBGaWxlIHBhdGggdG8gUEJUQSBwbG90IGRpcmVjdG9yeQpQQlRBX3Bsb3RzX2RpciA8LQogIGZpbGUucGF0aChhbmFseXNpc19kaXIsICJwbG90cyIsICJBbHRlcmF0aW9uX3R5cGVfYmFycGxvdHNfUEJUQSIpCmlmICghZGlyLmV4aXN0cyhQQlRBX3Bsb3RzX2RpcikpIHsKICBkaXIuY3JlYXRlKFBCVEFfcGxvdHNfZGlyKQp9CgoKIyBGaWxlIHBhdGggdG8gbW9sZWN1bGFyX3N1YnR5cGVfUEJUQV9wbG90cyBkaXJlY3RvcnkKbW9sZWN1bGFyX3N1YnR5cGVfUEJUQV9wbG90c19kaXIgPC0KICBmaWxlLnBhdGgoUEJUQV9wbG90c19kaXIsICJtb2xlY3VsYXJfc3VidHlwZV9QQlRBX3Bsb3RzIikKaWYgKCFkaXIuZXhpc3RzKG1vbGVjdWxhcl9zdWJ0eXBlX1BCVEFfcGxvdHNfZGlyKSkgewogIGRpci5jcmVhdGUobW9sZWN1bGFyX3N1YnR5cGVfUEJUQV9wbG90c19kaXIpCn0KCnNvdXJjZShwYXN0ZTAocm9vdF9kaXIsICIvZmlndXJlcy9zY3JpcHRzL3RoZW1lLlIiKSkKc291cmNlKHBhc3RlMChhbmFseXNpc19kaXIsICIvdXRpbC9mdW5jdGlvbi1jcmVhdGUtYmFycGxvdC5SIikpCmBgYAoKIyBSZWFkIGluIGRhdGEgYW5kIHByb2Nlc3MKCiMjIFBSIGNvaG9ydAoKYGBge3IgbG9hZC1wcm9jZXNzLWlucHV0cy1QUn0KIyBWZWN0b3IgdG8gb3JkZXIgdGltZXBvaW50cwp0aW1lcG9pbnRzX29yZGVyIDwtIGMoIkRpYWdub3NpcyIsICJQcm9ncmVzc2l2ZSIsICJSZWN1cnJlbmNlIiwgIkRlY2Vhc2VkIiwgIlNlY29uZCBNYWxpZ25hbmN5IiwgIlVuYXZhaWxhYmxlIikKCiMgVmVjdG9yIHRvIG9yZGVyIFZhcmlhbnRfQ2xhc3NpZmljYXRpb24KdmFyaWFudHNfb3JkZXIgPC0gYygiRnJhbWVfU2hpZnRfRGVsIiwgIkZyYW1lX1NoaWZ0X0lucyIsICJJbl9GcmFtZV9EZWwiLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICJJbl9GcmFtZV9JbnMiLCAiTWlzc2Vuc2VfTXV0YXRpb24iLCAiTm9uc2Vuc2VfTXV0YXRpb24iLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICJOb25zdG9wX011dGF0aW9uIiwgIlNwbGljZV9TaXRlIiwgIlRyYW5zbGF0aW9uX1N0YXJ0X1NpdGUiKQoKcGJ0YV9kZiA8LSByZWFkcjo6cmVhZF90c3YocGJ0YV9maWxlLCBndWVzc19tYXggPSAxMDAwMDAsIHNob3dfY29sX3R5cGVzID0gRkFMU0UpICU+JSAKICBzZWxlY3QoS2lkc19GaXJzdF9QYXJ0aWNpcGFudF9JRCwgS2lkc19GaXJzdF9CaW9zcGVjaW1lbl9JRCwgY2dfbXVsdGlwbGUsIGNnX2lkLCBjZ0dGQUMsIHR1bW9yX2Rlc2NyaXB0b3IsIG1vbGVjdWxhcl9zdWJ0eXBlKQoKIyBUaGlzIGluY2x1ZGVzIG5vbiBzeW5vbnltb3VzIG11dGF0aW9ucyBhcyBkZXNjcmliZWQgaW4gdGhlIGAwMS1wcmVwb3JjZXNzLWRhdGEuUm1kYAp0bWJfdmFmX2RmIDwtIHJlYWRyOjpyZWFkX3Rzdih0bWJfdmFmX2ZpbGUsIGd1ZXNzX21heCA9IDEwMDAwMCwgc2hvd19jb2xfdHlwZXMgPSBGQUxTRSkgJT4lIAogIGZpbHRlcighdG1iID49IDEwKSAlPiUgCiAgc2VsZWN0KEtpZHNfRmlyc3RfQmlvc3BlY2ltZW5fSUQsIFZhcmlhbnRfQ2xhc3NpZmljYXRpb24sIGdlbmVfcHJvdGVpbiwgbXV0YXRpb25fY291bnQsCXJlZ2lvbl9zaXplLCB0bWIsIFZBRikKCmdlbm9taWNfcGFpcmVkX2RmIDwtIHJlYWRyOjpyZWFkX3RzdihnZW5vbWljX3BhaXJlZF9maWxlLCBndWVzc19tYXggPSAxMDAwMDAsIHNob3dfY29sX3R5cGVzID0gRkFMU0UpICU+JQogIGxlZnRfam9pbihwYnRhX2RmLCBieSA9IGMoIktpZHNfRmlyc3RfUGFydGljaXBhbnRfSUQiKSkgJT4lIAogIGxlZnRfam9pbih0bWJfdmFmX2RmLCBieSA9IGMoIktpZHNfRmlyc3RfQmlvc3BlY2ltZW5fSUQiKSkgJT4lCiAgZmlsdGVyKCFpcy5uYSh0bWIpKQoKbm9fc2FtcGxlc193aXRoX3RtYiA8LSBwcmludChsZW5ndGgodW5pcXVlKGdlbm9taWNfcGFpcmVkX2RmJEtpZHNfRmlyc3RfUGFydGljaXBhbnRfSUQpKSkKCiMgQXR0ZW50aW9uIGFzIHNvbWUgYnMgc3BlY2ltZW4gbWlnaHQgbm90IGhhdmUgVE1CLgojIElmIHRoYXQgaGFwcGVucywgd2Ugd2lsbCBlbmQgdXAgd2l0aCBzYW1wbGVzIGxhY2tpbmcgdGltZXBvaW50cy4KIyBMZXQncyBpZGVudGlmeSB0aGVzZSBzYW1wbGVzIGFuZCByZW1vdmUgdGhlbSBmb3Igbm93LgoKUFJfZGYgPC0gZ2Vub21pY19wYWlyZWRfZGYgJT4lCiAgc2VsZWN0KEtpZHNfRmlyc3RfUGFydGljaXBhbnRfSUQsIHR1bW9yX2Rlc2NyaXB0b3IpICU+JSAKICB1bmlxdWUoKSAlPiUKICBhcnJhbmdlKEtpZHNfRmlyc3RfUGFydGljaXBhbnRfSUQsIHR1bW9yX2Rlc2NyaXB0b3IpICU+JQogIGdyb3VwX2J5KEtpZHNfRmlyc3RfUGFydGljaXBhbnRfSUQpICU+JQogIHN1bW1hcml6ZSh0dW1vcl9kZXNjcmlwdG9yX3N1bSA9IHN0cl9jKHR1bW9yX2Rlc2NyaXB0b3IsIGNvbGxhcHNlID0gIjsiKSkgJT4lCiAgZmlsdGVyKCF0dW1vcl9kZXNjcmlwdG9yX3N1bSAlaW4lIGMoIkRpYWdub3NpcyIsICJQcm9ncmVzc2l2ZSIsICJSZWN1cnJlbmNlIiwgIlNlY29uZCBNYWxpZ25hbmN5IiwgIlVuYXZhaWxhYmxlIiwgIkRlY2Vhc2VkIiwgIlByb2dyZXNzaXZlO1Byb2dyZXNzaXZlIikpICU+JQogIGxlZnRfam9pbihnZW5vbWljX3BhaXJlZF9kZiwgYnkgPSBjKCJLaWRzX0ZpcnN0X1BhcnRpY2lwYW50X0lEIikpICU+JQogIGZpbHRlcighY2dfaWQgPT0gIk5BIiwKICAgICAgICAgICF0dW1vcl9kZXNjcmlwdG9yID09ICJOb3QgUmVwb3J0ZWQiKSAlPiUgCiAgbXV0YXRlKG1hdGNoX2lkID0gcGFzdGUodHVtb3JfZGVzY3JpcHRvciwgS2lkc19GaXJzdF9QYXJ0aWNpcGFudF9JRCwgc2VwID0gIl8iKSwKICAgICAgICAgY2dfaWQgPSBzdHJfcmVwbGFjZShjZ19pZCwgYygiL3wtIiksICIgIikpCiAgCgpub19zYW1wbGVzIDwtIHByaW50KGxlbmd0aCh1bmlxdWUoUFJfZGYkS2lkc19GaXJzdF9QYXJ0aWNpcGFudF9JRCkpKQoKIyBMZXQncyBjb3VudCBudW1iZXIgb2Ygc2FtcGxlcyAKUFJfY291bnRfZGYgPC0gUFJfZGYgJT4lIAogIGdyb3VwX2J5KHR1bW9yX2Rlc2NyaXB0b3IsIGNnX2lkLCBtb2xlY3VsYXJfc3VidHlwZSwgS2lkc19GaXJzdF9QYXJ0aWNpcGFudF9JRCwgbWF0Y2hfaWQsIFZhcmlhbnRfQ2xhc3NpZmljYXRpb24pICU+JSAKICBkcGx5cjo6Y291bnQoY2dfaWQpICU+JSAKICBtdXRhdGUodHVtb3JfZGVzY3JpcHRvciA9IGZhY3Rvcih0dW1vcl9kZXNjcmlwdG9yKSwKICAgICAgICAgdHVtb3JfZGVzY3JpcHRvciA9IGZjdF9yZWxldmVsKHR1bW9yX2Rlc2NyaXB0b3IsIHRpbWVwb2ludHNfb3JkZXIpLAogICAgICAgICBWYXJpYW50X0NsYXNzaWZpY2F0aW9uID0gZmFjdG9yKFZhcmlhbnRfQ2xhc3NpZmljYXRpb24pLAogICAgICAgICBWYXJpYW50X0NsYXNzaWZpY2F0aW9uID0gZmN0X3JlbGV2ZWwoVmFyaWFudF9DbGFzc2lmaWNhdGlvbiwgdmFyaWFudHNfb3JkZXIpKSAlPiUgCiAgYXJyYW5nZSh0dW1vcl9kZXNjcmlwdG9yLCBWYXJpYW50X0NsYXNzaWZpY2F0aW9uKQoKYGBgIAoKIyMgUEJUQSBjb2hvcnQKCmBgYHtyIGxvYWQtcHJvY2Vzcy1pbnB1dHMtUEJUQX0KdG1iX2RmIDwtIHJlYWRyOjpyZWFkX3Rzdih0bWJfZmlsZSwgZ3Vlc3NfbWF4ID0gMTAwMDAwLCBzaG93X2NvbF90eXBlcyA9IEZBTFNFKSAlPiUgCiAgZHBseXI6OnJlbmFtZShLaWRzX0ZpcnN0X0Jpb3NwZWNpbWVuX0lEID0gVHVtb3JfU2FtcGxlX0JhcmNvZGUpICMgY2hhbmdlIG5hbWUgb2YgdGhlIGJpb3NwZWNpbWVuIHRvIG1hdGNoIHRoZSBvbmUgZnJvbSB0aGUgaGlzdG9sb2dpZXMgZmlsZXMKCnRtYl92YWZfZGYgPC0gcmVhZHI6OnJlYWRfdHN2KG1hZl9maWxlLCBndWVzc19tYXggPSAxMDAwMDAsIHNob3dfY29sX3R5cGVzID0gRkFMU0UpICU+JQogIGxlZnRfam9pbih0bWJfZGYsIGJ5ID0gYygiS2lkc19GaXJzdF9CaW9zcGVjaW1lbl9JRCIpKSAlPiUgCiAgZmlsdGVyKCF0bWIgPj0gMTAsCiAgICAgICAgICFpcy5uYSh0bWIpKSAKClBCVEFfZGYgPC0gcGJ0YV9kZiAlPiUgCiAgbGVmdF9qb2luKHRtYl92YWZfZGYsIGJ5ID0gYygiS2lkc19GaXJzdF9CaW9zcGVjaW1lbl9JRCIpKSAlPiUgCiAgZmlsdGVyKCFjZ19pZCA9PSAiTkEiLAogICAgICAgICAgIXR1bW9yX2Rlc2NyaXB0b3IgPT0gIk5vdCBSZXBvcnRlZCIpICU+JSAKICBtdXRhdGUobWF0Y2hfaWQgPSBwYXN0ZSh0dW1vcl9kZXNjcmlwdG9yLCBLaWRzX0ZpcnN0X1BhcnRpY2lwYW50X0lELCBzZXAgPSAiXyIpLAogICAgICAgICBjZ19pZCA9IHN0cl9yZXBsYWNlKGNnX2lkLCBjKCIvfC0iKSwgIiAiKSkKCm5vX3NhbXBsZXMgPC0gcHJpbnQobGVuZ3RoKHVuaXF1ZShQQlRBX2RmJEtpZHNfRmlyc3RfUGFydGljaXBhbnRfSUQpKSkKCiMgTGV0J3MgY291bnQgbnVtYmVyIG9mIHNhbXBsZXMgClBCVEFfY291bnRfZGYgPC0gUEJUQV9kZiAlPiUgCiAgZ3JvdXBfYnkodHVtb3JfZGVzY3JpcHRvciwgY2dfaWQsIG1vbGVjdWxhcl9zdWJ0eXBlLCBLaWRzX0ZpcnN0X1BhcnRpY2lwYW50X0lELCBtYXRjaF9pZCwgVmFyaWFudF9DbGFzc2lmaWNhdGlvbikgJT4lIAogIGRwbHlyOjpjb3VudChjZ19pZCkgJT4lIAogIG11dGF0ZSh0dW1vcl9kZXNjcmlwdG9yID0gZmFjdG9yKHR1bW9yX2Rlc2NyaXB0b3IpLAogICAgICAgICB0dW1vcl9kZXNjcmlwdG9yID0gZmN0X3JlbGV2ZWwodHVtb3JfZGVzY3JpcHRvciwgdGltZXBvaW50c19vcmRlciksCiAgICAgICAgIFZhcmlhbnRfQ2xhc3NpZmljYXRpb24gPSBmYWN0b3IoVmFyaWFudF9DbGFzc2lmaWNhdGlvbiksCiAgICAgICAgIFZhcmlhbnRfQ2xhc3NpZmljYXRpb24gPSBmY3RfcmVsZXZlbChWYXJpYW50X0NsYXNzaWZpY2F0aW9uLCB2YXJpYW50c19vcmRlcikpICU+JSAKICBhcnJhbmdlKHR1bW9yX2Rlc2NyaXB0b3IsIFZhcmlhbnRfQ2xhc3NpZmljYXRpb24pIAoKYGBgCgoKCiMgRGVmaW5lIHBhcmFtZXRlcnMgZm9yIHBsb3RzCgpgYGB7ciBkZWZpbmUtcGFyYW1ldGVycy1mb3ItcGxvdHN9CiMgUmVhZCBjb2xvciBwYWxldHRlCnBhbGV0dGVfZGYgPC0gcmVhZHI6OnJlYWRfdHN2KHBhbGV0dGVfZmlsZSwgZ3Vlc3NfbWF4ID0gMTAwMDAwLCBzaG93X2NvbF90eXBlcyA9IEZBTFNFKSAlPiUgCiAgbXV0YXRlKGNvbG9yX25hbWVzID0gZmFjdG9yKGNvbG9yX25hbWVzKSwKICAgICAgICAgY29sb3JfbmFtZXMgPSBmY3RfcmVsZXZlbChjb2xvcl9uYW1lcywgdmFyaWFudHNfb3JkZXIpKQoKIyBEZWZpbmUgYW5kIG9yZGVyIHBhbGV0dGUKcGFsZXR0ZSA8LSBwYWxldHRlX2RmJGhleF9jb2RlcwpuYW1lcyhwYWxldHRlKSA8LSBwYWxldHRlX2RmJGNvbG9yX25hbWVzCmBgYAoKIyBBbHRlcmF0aW9ucyBwZXIgdGltZXBvaW50CgojIyBQUiBjb2hvcnQKCmBgYHtyIHBsb3QtdGltZXBvaW50LVBSLCBmaWcud2lkdGggPSA2LCBmaWcuaGVpZ2h0ID0gNiwgZmlnLmZ1bGx3aWR0aCA9IFRSVUV9CiMgRGVmaW5lIHBhcmFtZXRlcnMgZm9yIGZ1bmN0aW9uCnhfdmFsdWUgPC0gUFJfY291bnRfZGYkdHVtb3JfZGVzY3JpcHRvcgp0aXRsZSA8LSBwYXN0ZSgiVmFyaWFudCB0eXBlcyBpbiB0aGUgcGFpcmVkIGxvbmdpdHVkaW5hbCBjb2hvcnQiLCBzZXAgPSAiICIpCgojIFJ1biBmdW5jdGlvbgpmbmFtZSA8LSBwYXN0ZTAoUFJfcGxvdHNfZGlyLCAiLyIsICJBbHRlcmF0aW9uX3R5cGVfdGltZXBvaW50c19iYXJwbG90c19QUi5wZGYiKQpwcmludChmbmFtZSkKcCA8LSBjcmVhdGVfc3RhY2tlZF9iYXJwbG90X3ZhcmlhbnQoZGYgPSBQUl9jb3VudF9kZiwgeCA9IHhfdmFsdWUsIHBhbGV0dGUgPSBwYWxldHRlLCB0aXRsZSA9IHRpdGxlKQpwZGYoZmlsZSA9IGZuYW1lLCB3aWR0aCA9IDYsIGhlaWdodCA9IDYpCnByaW50KHApCmRldi5vZmYoKQpgYGAKCiMjIFBCVEEgY29ob3J0CgpgYGB7ciBwbG90LXRpbWVwb2ludC1QQlRBLCBmaWcud2lkdGggPSA2LCBmaWcuaGVpZ2h0ID0gNiwgZmlnLmZ1bGx3aWR0aCA9IFRSVUV9CiMgRGVmaW5lIHBhcmFtZXRlcnMgZm9yIGZ1bmN0aW9uCnhfdmFsdWUgPC0gUEJUQV9jb3VudF9kZiR0dW1vcl9kZXNjcmlwdG9yCnRpdGxlIDwtIHBhc3RlKCJWYXJpYW50IHR5cGVzIGluIHRoZSBQQlRBIGNvaG9ydCIsIHNlcCA9ICIgIikKCiMgUnVuIGZ1bmN0aW9uCmZuYW1lIDwtIHBhc3RlMChQQlRBX3Bsb3RzX2RpciwgIi8iLCAiQWx0ZXJhdGlvbl90eXBlX3RpbWVwb2ludHNfYmFycGxvdHNfUEJUQS5wZGYiKQpwcmludChmbmFtZSkKcCA8LSBjcmVhdGVfc3RhY2tlZF9iYXJwbG90X3ZhcmlhbnQoZGYgPSBQQlRBX2NvdW50X2RmLCB4ID0geF92YWx1ZSwgcGFsZXR0ZSA9IHBhbGV0dGUsIHRpdGxlID0gdGl0bGUpCnBkZihmaWxlID0gZm5hbWUsIHdpZHRoID0gNiwgaGVpZ2h0ID0gNikKcHJpbnQocCkKZGV2Lm9mZigpCmBgYAoKCiMgQWx0ZXJhdGlvbnMgcGVyIHRpbWVwb2ludCBpbiBlYWNoIGNhbmNlciB0eXBlCgojIyBQUiBjb2hvcnQKCmBgYHtyIHBsb3QtY2ctaWQtUFIsIGZpZy53aWR0aCA9IDEyLCBmaWcuaGVpZ2h0ID0gMTUsIGZpZy5mdWxsd2lkdGggPSBUUlVFfQpQUl9wYW5lbF9kZiA8LSBQUl9jb3VudF9kZiAlPiUgCiAgbXV0YXRlKGNnX2lkID0gc3RyX3dyYXAoY2dfaWQsIDEyKSkgIyBFZGl0IHRvIGZpdCBpbiB0aGUgcGxvdCB0aXRsZSBmb3IgdGhlIHBhbmVsCgojIERlZmluZSBwYXJhbWV0ZXJzIGZvciBmdW5jdGlvbgp4X3ZhbHVlIDwtIFBSX3BhbmVsX2RmJHR1bW9yX2Rlc2NyaXB0b3IKdGl0bGUgPC0gcGFzdGUoIlZhcmlhbnQgdHlwZXMgYWNyb3NzIGNhbmNlciBncm91cHMgaW4gdGhlIHBhaXJlZCBsb25naXR1ZGluYWwgY29ob3J0Iiwgc2VwID0gIiAiKQpyb3dzIDwtIDUKCiMgUnVuIGZ1bmN0aW9uCmZuYW1lIDwtIHBhc3RlMChQUl9wbG90c19kaXIsICIvIiwgIkFsdGVyYXRpb25fdHlwZV90aW1lcG9pbnRzX2NnX2lkX2JhcnBsb3RzX1BSLnBkZiIpCnByaW50KGZuYW1lKQpwIDwtIGNyZWF0ZV9zdGFja2VkX2JhcnBsb3RfdmFyaWFudF9jZ19pZChkZiA9IFBSX3BhbmVsX2RmLCB4ID0geF92YWx1ZSwgcGFsZXR0ZSA9IHBhbGV0dGUsIHRpdGxlID0gdGl0bGUsIHJvd3MgPSByb3dzKQpwZGYoZmlsZSA9IGZuYW1lLCB3aWR0aCA9IDEyLCBoZWlnaHQgPSAxNSkKcHJpbnQocCkKZGV2Lm9mZigpCmBgYAoKIyMgUEJUQSBjb2hvcnQKCgpgYGB7ciBwbG90LWNnLWlkLVBCVEEsIGZpZy53aWR0aCA9IDE1LCBmaWcuaGVpZ2h0ID0gMjgsIGZpZy5mdWxsd2lkdGggPSBUUlVFfQpQQlRBX3BhbmVsX2RmIDwtIFBCVEFfY291bnRfZGYgJT4lIAogIG11dGF0ZShjZ19pZCA9IHN0cl93cmFwKGNnX2lkLCAxMikpICMgRWRpdCB0byBmaXQgaW4gdGhlIHBsb3QgdGl0bGUgZm9yIHRoZSBwYW5lbAoKIyBEZWZpbmUgcGFyYW1ldGVycyBmb3IgZnVuY3Rpb24KeF92YWx1ZSA8LSBQQlRBX3BhbmVsX2RmJHR1bW9yX2Rlc2NyaXB0b3IKdGl0bGUgPC0gcGFzdGUoIlZhcmlhbnQgdHlwZXMgYWNyb3NzIGNhbmNlciBncm91cHMgaW4gdGhlIFBCVEEgY29ob3J0Iiwgc2VwID0gIiAiKQpyb3dzIDwtIDEwCgojIFJ1biBmdW5jdGlvbgpmbmFtZSA8LSBwYXN0ZTAoUEJUQV9wbG90c19kaXIsICIvIiwgIkFsdGVyYXRpb25fdHlwZV90aW1lcG9pbnRzX2NnX2lkX2JhcnBsb3RzX1BCVEEucGRmIikKcHJpbnQoZm5hbWUpCnAgPC0gY3JlYXRlX3N0YWNrZWRfYmFycGxvdF92YXJpYW50X2NnX2lkKGRmID0gUEJUQV9wYW5lbF9kZiwgeCA9IHhfdmFsdWUsIHBhbGV0dGUgPSBwYWxldHRlLCB0aXRsZSA9IHRpdGxlLCByb3dzID0gcm93cykKcGRmKGZpbGUgPSBmbmFtZSwgd2lkdGggPSAxNSwgaGVpZ2h0ID0gMjgpCnByaW50KHApCmRldi5vZmYoKQpgYGAKCgojIEFsdGVyYXRpb25zIHBlciB0aW1lcG9pbnQgaW4gZWFjaCBjYW5jZXIgdHlwZSBhbmQgbW9sZWN1bGFyIHN1YnR5cGUKCiMjIFBSIGNvaG9ydAoKYGBge3IgcGxvdC1tb2xlY3VsYXItc3VidHlwZS1QUiwgZmlnLndpZHRoID0gMTIsIGZpZy5oZWlnaHQgPSA2LCBmaWcuZnVsbHdpZHRoID0gVFJVRX0KUFJfcGFuZWxfZGYgPC0gUFJfY291bnRfZGYgJT4lIAogIG11dGF0ZShjZ19pZCA9IHN0cl9yZXBsYWNlX2FsbChjZ19pZCwgIiAiLCAiXyIpLAogICAgICAgICBtb2xlY3VsYXJfc3VidHlwZSA9IHN0cl93cmFwKG1vbGVjdWxhcl9zdWJ0eXBlLCAxMikpICMgRWRpdCB0byBmaXQgaW4gdGhlIHBsb3QgdGl0bGUgZm9yIHRoZSBwYW5lbAoKc2FtcGxlIDwtIGFzLmNoYXJhY3Rlcih1bmlxdWUoUFJfcGFuZWxfZGYkY2dfaWQpKSAKc2FtcGxlIDwtIHNvcnQoc2FtcGxlLCBkZWNyZWFzaW5nID0gRkFMU0UpCnNhbXBsZQoKCiMgTG9vcCB0aHJvdWdoIHZhcmlhYmxlCmZvciAoaSBpbiBzZXFfYWxvbmcoc2FtcGxlKSl7CiAgcHJpbnQoaSkKICBkZl9zdWIgPC0gUFJfcGFuZWxfZGYgJT4lCiAgICBmaWx0ZXIoY2dfaWQgPT0gc2FtcGxlW2ldKSAKIAogIGlmIChpICVpbiUgYygxNikpewogICAgd2lkdGhfdmFsdWUgPSAxOAogICAgfWVsc2V7CiAgICB3aWR0aF92YWx1ZSA9IDEwCiAgICB9CiAgCiMgRGVmaW5lIHBhcmFtZXRlcnMgZm9yIGZ1bmN0aW9uCnhfdmFsdWUgPC0gZGZfc3ViJHR1bW9yX2Rlc2NyaXB0b3IKdGl0bGUgPC0gcGFzdGUoc2FtcGxlW2ldLCAiVmFyaWFudHMgYWNyb3NzIG1vbGVjdWxhciBzdWJ0eXBlcyIsIHNlcCA9ICI6ICIpCnJvd3NfdmFsdWUgPC0gMQoKIyBSdW4gZnVuY3Rpb24KZm5hbWUgPC0gcGFzdGUwKG1vbGVjdWxhcl9zdWJ0eXBlX1BSX3Bsb3RzX2RpciwgIi8iLCBzYW1wbGVbaV0sICJfQWx0ZXJhdGlvbl90eXBlX3RpbWVwb2ludHNfbW9sZWN1bGFyX3N1YnR5cGVfYmFycGxvdHNfUFIucGRmIikKcHJpbnQoZm5hbWUpCnAgPC0gY3JlYXRlX3N0YWNrZWRfYmFycGxvdF92YXJpYW50X21vbGVjdWxhcl9zdWJ0eXBlKGRmID0gZGZfc3ViLCB4ID0geF92YWx1ZSwgcGFsZXR0ZSA9IHBhbGV0dGUsIHRpdGxlID0gdGl0bGUsIHJvd3MgPSByb3dzX3ZhbHVlKQpwZGYoZmlsZSA9IGZuYW1lLCB3aWR0aCA9IHdpZHRoX3ZhbHVlLCBoZWlnaHQgPSA2KQpwcmludChwKQpkZXYub2ZmKCkKfQoKYGBgCgojIyBQQlRBIGNvaG9ydAoKCmBgYHtyIHBsb3QtbW9sZWN1bGFyLXN1YnR5cGUtUEJUQSwgZmlnLndpZHRoID0gMTIsIGZpZy5oZWlnaHQgPSA2LCBmaWcuZnVsbHdpZHRoID0gVFJVRX0KUEJUQV9wYW5lbF9kZiA8LSBQQlRBX2NvdW50X2RmICU+JSAKICBtdXRhdGUoY2dfaWQgPSBzdHJfcmVwbGFjZV9hbGwoY2dfaWQsICIgIiwgIl8iKSwKICAgICAgICAgbW9sZWN1bGFyX3N1YnR5cGUgPSBzdHJfd3JhcChtb2xlY3VsYXJfc3VidHlwZSwgMTIpKSAjIEVkaXQgdG8gZml0IGluIHRoZSBwbG90IHRpdGxlIGZvciB0aGUgcGFuZWwKCnNhbXBsZSA8LSBhcy5jaGFyYWN0ZXIodW5pcXVlKFBCVEFfcGFuZWxfZGYkY2dfaWQpKSAKc2FtcGxlIDwtIHNvcnQoc2FtcGxlLCBkZWNyZWFzaW5nID0gRkFMU0UpCnNhbXBsZQoKCiMgTG9vcCB0aHJvdWdoIHZhcmlhYmxlCmZvciAoaSBpbiBzZXFfYWxvbmcoc2FtcGxlKSl7CiAgcHJpbnQoaSkKICBkZl9zdWIgPC0gUEJUQV9wYW5lbF9kZiAlPiUKICAgIGZpbHRlcihjZ19pZCA9PSBzYW1wbGVbaV0pIAogCiAgIGlmIChpICVpbiUgYygyNSwgNDEpKXsKICAgIHdpZHRoX3ZhbHVlID0gMTgKICAgIH1lbHNlewogICAgd2lkdGhfdmFsdWUgPSAxMAogICAgfQogIAojIERlZmluZSBwYXJhbWV0ZXJzIGZvciBmdW5jdGlvbgp4X3ZhbHVlIDwtIGRmX3N1YiR0dW1vcl9kZXNjcmlwdG9yCnRpdGxlIDwtIHBhc3RlKHNhbXBsZVtpXSwgIlZhcmlhbnRzIGFjcm9zcyBtb2xlY3VsYXIgc3VidHlwZXMiLCBzZXAgPSAiOiAiKQpyb3dzX3ZhbHVlIDwtIDEKCiMgUnVuIGZ1bmN0aW9uCmZuYW1lIDwtIHBhc3RlMChtb2xlY3VsYXJfc3VidHlwZV9QQlRBX3Bsb3RzX2RpciwgIi8iLCBzYW1wbGVbaV0sICJfQWx0ZXJhdGlvbl90eXBlX3RpbWVwb2ludHNfbW9sZWN1bGFyX3N1YnR5cGVfYmFycGxvdHNfUEJUQS5wZGYiKQpwcmludChmbmFtZSkKcCA8LSBjcmVhdGVfc3RhY2tlZF9iYXJwbG90X3ZhcmlhbnRfbW9sZWN1bGFyX3N1YnR5cGUoZGYgPSBkZl9zdWIsIHggPSB4X3ZhbHVlLCBwYWxldHRlID0gcGFsZXR0ZSwgdGl0bGUgPSB0aXRsZSwgcm93cyA9IHJvd3NfdmFsdWUpCnBkZihmaWxlID0gZm5hbWUsIHdpZHRoID0gd2lkdGhfdmFsdWUsIGhlaWdodCA9IDYpCnByaW50KHApCmRldi5vZmYoKQp9CgpgYGAKCgojIEFsdGVyYXRpb25zIHBlciB0aW1lcG9pbnQgaW4gZWFjaCBjYW5jZXIgdHlwZSwgbW9sZWN1bGFyLCBhbmQga2lkc19pZAoKIyMgUFIgY29ob3J0IHdpdGggbW9sZWN1bGFyIHN1YnR5cGUKCmBgYHtyIHBsb3QtY2ctaWQtbW9sZWN1bGFyLXN1YnR5cGUta2lkcy1QUiwgZmlnLndpZHRoID0gMTAsIGZpZy5oZWlnaHQgPSA2LCBmaWcuZnVsbHdpZHRoID0gVFJVRX0KY2dfZGYgPC0gUFJfY291bnRfZGYgJT4lCiAgIyBGaXggc3ludGF4IGluIGNhbmNlciBncm91cHMgbmFtZXMgCiAgbXV0YXRlKGNnX2lkID0gc3RyX3JlcGxhY2VfYWxsKGNnX2lkLCAiICIsICJfIikpICU+JSAKICBhcnJhbmdlKHR1bW9yX2Rlc2NyaXB0b3IsIGRlc2MobW9sZWN1bGFyX3N1YnR5cGUpKQoKc2FtcGxlIDwtIGFzLmNoYXJhY3Rlcih1bmlxdWUoY2dfZGYkY2dfaWQpKSAKc2FtcGxlIDwtIHNvcnQoc2FtcGxlLCBkZWNyZWFzaW5nID0gRkFMU0UpCnNhbXBsZQoKCiMgTG9vcCB0aHJvdWdoIHZhcmlhYmxlCmZvciAoaSBpbiBzZXFfYWxvbmcoc2FtcGxlKSl7CiAgcHJpbnQoaSkKICBkZl9zdWIgPC0gY2dfZGYgJT4lCiAgICBmaWx0ZXIoY2dfaWQgPT0gc2FtcGxlW2ldKSAKCiAgaWYgKGkgJWluJSBjKDIsIDcsIDE1LCAxOCkpewogICAgd2lkdGhfdmFsdWUgPSAyNQogICAgfWVsc2UgaWYgKGkgJWluJSBjKDEwLCAxNikpewogICAgd2lkdGhfdmFsdWUgPSAyOAogICAgfWVsc2V7CiAgICB3aWR0aF92YWx1ZSA9IDEwCiAgICAgIH0KCiAgIyBEZWZpbmUgcGFyYW1ldGVycyBmb3IgZnVuY3Rpb24KICB4X3ZhbHVlIDwtIGRmX3N1YiR0dW1vcl9kZXNjcmlwdG9yCiAgdGl0bGUgPC0gcGFzdGUoc2FtcGxlW2ldLCAiVmFyaWFudHMgYWNyb3NzIHNhbXBsZXMiLCBzZXAgPSAiOiAiKQogIHJvd3NfdmFsdWUgPC0gMQogIAogICMgUnVuIGZ1bmN0aW9uCiAgZm5hbWUgPC0gcGFzdGUwKGtpZHNfbW9sZWN1bGFyX3N1YnR5cGVfUFJfcGxvdHNfZGlyLCAiLyIsIHNhbXBsZVtpXSwgIl9BbHRlcmF0aW9uX3R5cGVfdGltZXBvaW50c19raWRzX2JhcnBsb3RzX1BSLnBkZiIpCiAgcHJpbnQoZm5hbWUpCiAgcCA8LSBjcmVhdGVfc3RhY2tlZF9iYXJwbG90X3ZhcmlhbnRfa2lkcyhkZiA9IGRmX3N1YiwgeCA9IHhfdmFsdWUsIHBhbGV0dGUgPSBwYWxldHRlLCB0aXRsZSA9IHRpdGxlLCByb3dzID0gcm93c192YWx1ZSkKICBwZGYoZmlsZSA9IGZuYW1lLCB3aWR0aCA9IHdpZHRoX3ZhbHVlLCBoZWlnaHQgPSA2KQogIHByaW50KHApCiAgZGV2Lm9mZigpCiAgfQoKYGBgCgojIyBQUiBjb2hvcnQgd2l0aG91dCBtb2xlY3VsYXIgc3VidHlwZQpgYGB7ciBwbG90LWNnLWlkLWtpZHMtUFIsIGZpZy53aWR0aCA9IDEwLCBmaWcuaGVpZ2h0ID0gNiwgZmlnLmZ1bGx3aWR0aCA9IFRSVUV9CmNnX2RmIDwtIFBSX2NvdW50X2RmICU+JQogICMgRml4IHN5bnRheCBpbiBjYW5jZXIgZ3JvdXBzIG5hbWVzIAogIG11dGF0ZShjZ19pZCA9IHN0cl9yZXBsYWNlX2FsbChjZ19pZCwgIiAiLCAiXyIpKQoKc2FtcGxlIDwtIGFzLmNoYXJhY3Rlcih1bmlxdWUoY2dfZGYkY2dfaWQpKSAKc2FtcGxlIDwtIHNvcnQoc2FtcGxlLCBkZWNyZWFzaW5nID0gRkFMU0UpCnNhbXBsZQoKCiMgTG9vcCB0aHJvdWdoIHZhcmlhYmxlCmZvciAoaSBpbiBzZXFfYWxvbmcoc2FtcGxlKSl7CiAgcHJpbnQoaSkKICBkZl9zdWIgPC0gY2dfZGYgJT4lCiAgICBmaWx0ZXIoY2dfaWQgPT0gc2FtcGxlW2ldKSAKCiAgaWYgKGkgJWluJSBjKDIsIDcsIDE1LCAxOCkpewogICAgd2lkdGhfdmFsdWUgPSAyNQogICAgfWVsc2UgaWYgKGkgJWluJSBjKDEwLCAxNikpewogICAgd2lkdGhfdmFsdWUgPSAyOAogICAgfWVsc2V7CiAgICB3aWR0aF92YWx1ZSA9IDEwCiAgICAgIH0KCiAgIyBEZWZpbmUgcGFyYW1ldGVycyBmb3IgZnVuY3Rpb24KICB4X3ZhbHVlIDwtIGRmX3N1YiR0dW1vcl9kZXNjcmlwdG9yCiAgdGl0bGUgPC0gcGFzdGUoc2FtcGxlW2ldLCAiVmFyaWFudHMgYWNyb3NzIHNhbXBsZXMiLCBzZXAgPSAiOiAiKQogIHJvd3MgPC0gMQogIAogICMgUnVuIGZ1bmN0aW9uCiAgZm5hbWUgPC0gcGFzdGUwKGtpZHNfUFJfcGxvdHNfZGlyLCAiLyIsIHNhbXBsZVtpXSwgIl9BbHRlcmF0aW9uX3R5cGVfdGltZXBvaW50c19raWRzX2JhcnBsb3RzX1BSLnBkZiIpCiAgcHJpbnQoZm5hbWUpCiAgcCA8LSBjcmVhdGVfc3RhY2tlZF9iYXJwbG90X3ZhcmlhbnRfa2lkcyhkZiA9IGRmX3N1YiwgeCA9IHhfdmFsdWUsIHBhbGV0dGUgPSBwYWxldHRlLCB0aXRsZSA9IHRpdGxlLCByb3dzID0gcm93cykKICBwZGYoZmlsZSA9IGZuYW1lLCB3aWR0aCA9IHdpZHRoX3ZhbHVlLCBoZWlnaHQgPSA2KQogIHByaW50KHApCiAgZGV2Lm9mZigpCiAgfQoKYGBgCgpgYGB7ciBlY2hvPVRSVUV9CnNlc3Npb25JbmZvKCkKYGBgCg==